You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@mina.apache.org by Max Larsson <ma...@facilityboss.biz> on 2014/03/27 20:31:07 UTC

Using a StateMachine for protocol handshake.

Hi,

i have a question regarding who to implement it in a nice way.

Background:

The protocol i implements has upon a connection establishment a
small handshake. Mainly to choose which version and variant of
the protocol to use.
For the handshake i implemented a StateMachine, which upon a
session create event start the handshake. Thats works fine.

Now if i use the higher level implementation i have a method
connect which tells mina to use my iohandler etc and try to build
a connection. Next i send some protocol messages. Now i have the
problem that the handshake needs some time and between connect
and sending a message the state machine hasn't yet gone through
the handshake and thus don't forward the message top the socket,
as long it isn't in the matching state.
To avoid that i do the following in the connect method:

- connect
- wait for sessionCraeted event // now the StateMachine performs the 
hadnshake
- i sleep for about 2 seconds

And for that last step i have a feeling there must be a better way
to implement that?


best regards


Max Larsson

-- 
------------------------------------------------------------------------
Max Larsson
facilityboss GmbH
Rheinstrasse 75, 64295 Darmstadt / Germany
Handelsregister Darmstadt, HRB 86193
Geschäftsführer: Dipl.-Inform. Larsson

Fax: +49 6151 869 278
Mobil: +49 179 2184428
Email: max.larsson@facilityboss.biz

Re: Using a StateMachine for protocol handshake.

Posted by Max Larsson <ma...@facilityboss.biz>.
Hi,

 > 1) is the client under your control ? Ie, can you make so that the
> client does not send any message until teh handshake has completed ?

Actually the client is more the server part, i open the connection,
the "client" then send a string with the supported protocol
variants like this (end by \n):

VARIANt1;VARIANT2;VARIANt3

Next is send the desired variant and get the version like this:

1.2;1.3;2.2

As the last part i send back the desired version which gets acknowledge
be the client.

That is the handshake, now the client or i can send messages, before 
this moment no other messages are exchanged. So yes i client is more or
less  under control.

> 2) In case you can't control the client, what I understand is that you
> differ the decoding of the received message until the handshake is
> completed. Am I right ?

Yes your are good. After the handshake a slightly modified xml messages
are exchanged. I use a ProtocolCodecFilter for that.

regards


Max

>
> Le 3/27/14 8:31 PM, Max Larsson a écrit :
>>
>> Hi,
>>
>> i have a question regarding who to implement it in a nice way.
>>
>> Background:
>>
>> The protocol i implements has upon a connection establishment a
>> small handshake. Mainly to choose which version and variant of
>> the protocol to use.
>> For the handshake i implemented a StateMachine, which upon a
>> session create event start the handshake. Thats works fine.
>>
>> Now if i use the higher level implementation i have a method
>> connect which tells mina to use my iohandler etc and try to build
>> a connection. Next i send some protocol messages. Now i have the
>> problem that the handshake needs some time and between connect
>> and sending a message the state machine hasn't yet gone through
>> the handshake and thus don't forward the message top the socket,
>> as long it isn't in the matching state.
>> To avoid that i do the following in the connect method:
>>
>> - connect
>> - wait for sessionCraeted event // now the StateMachine performs the
>> hadnshake
>> - i sleep for about 2 seconds
>>
>> And for that last step i have a feeling there must be a better way
>> to implement that?
>>
>>
>> best regards
>>
>>
>> Max Larsson
>>
>
>


-- 
_____________________________________________________________________

http://facilityboss.biz
http://facebook.com/facilityboss
_____________________________________________________________________

Max Larsson
facilityboss GmbH
Rheinstrasse 75, 64295 Darmstadt / Germany
Handelsregister Darmstadt, HRB 86193
Geschäftsführer: Dipl.-Inform. Max Lars Robert Larsson

Mobil: +49 179 2184428
Email: max.larsson@facilityboss.biz

Re: Using a StateMachine for protocol handshake.

Posted by Emmanuel Lécharny <el...@gmail.com>.
Interesting problem...

I hav a few questions :

1) is the client under your control ? Ie, can you make so that the
client does not send any message until teh handshake has completed ?
2) In case you can't control the client, what I understand is that you
differ the decoding of the received message until the handshake is
completed. Am I right ?


Le 3/27/14 8:31 PM, Max Larsson a écrit :
>
> Hi,
>
> i have a question regarding who to implement it in a nice way.
>
> Background:
>
> The protocol i implements has upon a connection establishment a
> small handshake. Mainly to choose which version and variant of
> the protocol to use.
> For the handshake i implemented a StateMachine, which upon a
> session create event start the handshake. Thats works fine.
>
> Now if i use the higher level implementation i have a method
> connect which tells mina to use my iohandler etc and try to build
> a connection. Next i send some protocol messages. Now i have the
> problem that the handshake needs some time and between connect
> and sending a message the state machine hasn't yet gone through
> the handshake and thus don't forward the message top the socket,
> as long it isn't in the matching state.
> To avoid that i do the following in the connect method:
>
> - connect
> - wait for sessionCraeted event // now the StateMachine performs the
> hadnshake
> - i sleep for about 2 seconds
>
> And for that last step i have a feeling there must be a better way
> to implement that?
>
>
> best regards
>
>
> Max Larsson
>


-- 
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com