On 4/12/07, Trustin Lee <[EMAIL PROTECTED]> wrote:
Hi Maarten,
On 4/12/07, Maarten Bosteels <[EMAIL PROTECTED]> wrote:
> Hi folks,
>
> Until now I had only implemented server apps with MINA (IoAcceptor), and
no
> client apps (IoConnector).
>
> I started working on a small tutorial about
ProtocolDecoder/ProtocolEncoder
> to complement Mark's Getting Started Guide,
> and while implementing the client side I was wondering if a ReadFuture
would
> be an interesting feauture.
>
> Suppose you have a request-response protocol and you want to implement
the
> client synchronously:
> connect, send a request and wait until the response comes in.
>
> What is currently the best way to go ?
>
> With a ReadFuture it could be done like this:
>
> Object request = ...;
> ConnectFuture connectFuture = connector.connect(new
> InetSocketAddress("localhost",5555));
> connectFuture.join(100);
> if (connectFuture.isConnected()) {
> IoSession session = connectFuture.getSession();
> session.write( request );
> ReadFuture readFuture = session.read();
> readFuture.join();
> if (readFuture.messageRead()) {
> Object response = readFuture.getResult();
> doSomethingWith(response);
> }
> session.close().join();
> }
>
> What do you think ?
It sounds very interesting. Assuming we have ReadFuture, should
IoHandler.messageReceived() be notified?
Not sure about that.
How are people currently implementing a client that wants to wait for a
response ?
I did a very quick-and-dirty implementation:
* store a ReadFuture in the session
* IoHandler.messageReceived(Object message) calls readFuture.setResult
(message)
But it's of course way too simplistic. For instance, it should be possible
to do
session.write();
ReadFuture f1 = session.read();
ReadFuture f2 = session.read();
f1.join();
f2.join();
Storing a list of ReadFuture's in the IoSession is probably not a good idea
?
Unfortunately, I do not know mina internals well enough to do a proper
implementation.
Maarten
Trustin
--
what we call human nature is actually human habit
--
http://gleamynode.net/
--
PGP Key ID: 0x0255ECA6