mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Fernando C. de Castro" <ferna...@altriz.com.br>
Subject Changing Codec "on the fly" ?
Date Wed, 24 Jan 2007 22:21:55 GMT


   I am trying to do something that I don't even know is possible. Can I change the codec
"on the fly"?

Let me try and explain what I'm doing so you guys can follow my thoughts.

On my SessionHandler (extends IoHandlerAdapter) I add a Codec to the session as it's created:

public void sessionCreated( IoSession session )

 		session.getFilterChain().addFirst  (
				new ProtocolCodecFilter(new IDprotocolCodecFactory()));


OK, so it loads my IDprotocolCodecFactory which has one messageEncoder and one messageDecoder:

public class IDprotocolCodecFactory extends DemuxingProtocolCodecFactory 
	public IDprotocolCodecFactory () {

This messageDecoder waits for 2 bytes, analyses them then returns MessageDecoderResult.OK
, and that fires the messageReceived() on my SessionHanlder. So far, working as expected.

Then, I would like to change the Codec (e.g. the "identification stage" is over, now the server
expects another kind of messages). So, on the messageReceived(), I try to change the codec:

   public void messageReceived( IoSession session, Object message )
    	if (session.getFilterChain().contains("idcodec")){

	       		session.getFilterChain().addFirst  (
					new ProtocolCodecFilter(new MyMessageCodecFactory()));


       else {

       // after the "idcodec" was removed from the chain and "messagecodec" was placed instead,
       // messageReceived() will be triggered by "messagecodec" and will always get to this

      // (or so I expect...)

The MyMessageCodecFactory class is similar the presented IDprotocolCodecFactory (extends DemuxingProtocolCodecFactory

    Is it possible to change the codec like this? Because it's not working. It's like I'm
stuck with "idcodec" forever, it never changes to "messagecodec".

    Any help and/or explanation is appreciated.


View raw message