On 24/08/2010 19:08, Chris Frey wrote:
>
> I also think that handshake semaphores should not have to be in the
> application code either.
Agreed. I've been trying to think if it's possible to provide an API
which allows use of both synchronous and asynchronous receiving. This
would make the raw channel API suitable for full duplex protocols (like
brawchannel currently uses) and for simpler send/receive protocols (like
the usbdemo sample from RIM). I think this should be possible by having
two constructors, one which takes a callback pointer (creating a raw
channel which uses RegisterInterest() internally) and the other taking
no callback and requiring manual calls to an explicit receive method.
> So... what if SocketDataHandler callbacks (the callbacks passed into
> RegisterInterest() calls) also took a Usb::Error pointer. Then DoRead()
> would call the callback on both success and error, and the callback could
> process handshaking as appropriate.
That could work. My only reservation is that a callback which either
means you have data to read or an error seems a little messy. Would
splitting the callback out into an interface class be a bit neater?
Something like the following:
class SocketCallback {
public:
// Called when data is available, like the current
SocketRoutingQueue::SocketDataHandler callback
virtual void SocketData(Data*) = 0;
// Called when an error is received on the socket.
virtual void SocketError(Barry::Error*) = 0;
}
> Then in brawchannel.cc, instead of doing a rawChannel.Send() followed
> by a sem.WaitForSignal(), the wait would happen inside rawChannel.Send(),
> and only if needed. i.e. it would block if the handshaking was not complete
> yet.
Agreed, it would be make it a far nicer API if clients didn't have to
mess about with semaphores. I think it should be possible to do this
while still staying responsive to receiving close packets on socket 0
from the BlackBerry.
I've managed to be busy with various unrelated things today, so haven't
had time to do anything more on Barry other than think about how to
improve the raw channel API. When I next get a chance I'll try to update
the API with some of your suggestions and hopefully end up with
something far simpler.
Regards,
Toby
------------------------------------------------------------------------------
Sell apps to millions through the Intel(R) Atom(Tm) Developer Program
Be part of this innovative community and reach millions of netbook users
worldwide. Take advantage of special opportunities to increase revenue and
speed time-to-market. Join now, and jumpstart your future.
http://p.sf.net/sfu/intel-atom-d2d
_______________________________________________
Barry-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/barry-devel