2011-08-03 14 views
2

私はapache minaで数日間プレイしています。私は、MyoSoSessionのようなものを作成するためにIoSessionを拡張(または実装)することによってどのように作成することができますか質問したいと思います。 Handlerクラスで、私はこのような何かをしたいのでApache Mina、自分のIoSessionを作成する:How to?

私はこれをしたい理由は次のとおりです。MyIoSessionは、いくつかのユニークなIDを持っていますし、この方法は、私が送信されたクライアントを識別よ

public class MyHandler extends IoHandlerAdapter{ 
    public void messageReceived(MyIoSession session, Object message) throws Exception 
    { 
     // here I have MyIoSession instead of IoSession which will have more info something 
     // like an unique ID 
    } 
} 

この方法サーバーへのメッセージ。

また、これを実現する他のより良い方法がある場合は、私に教えてください。

おかげ

答えて

2

は、私はあなたがユニークなIDとしたいだけのように、私はIoSession内の特定の情報を保存したかった同様の問題がありました。 私はこの完全な混乱を適切に拡張する方法を見つけなかったので(MINAに自分のIoSession実装を作成させるためにIoSessionFactoryのようなものを渡すことができる場所を探していました)、私はsetAttribute(Object, Object)メソッドを使って情報を保存しましたこのセッションについて あなたはこのようにそれを行うことができます:

public class MyHandler extends IoHandlerAdapter{ 
    private enum AttributeKeys { 
     KEY_UNIQUEID; 
    } 
    public void sessionCreated(IoSession session) throws Exception { 
     //create and remember a uniqueID upon session creation 
     session.setAttribute(AttributeKeys.KEY_UNIQUEID, createUniqueID()); 
    } 

    //called with the regular IoSession 
    public void messageReceived(IoSession session, Object message) throws Exception { 
     //wherever you need the UniqueID, use getSessionUniqueID(session); 
    } 

    public String getSessionUniqueID(session){ 
     return session.getAttribute(AttributeKeys.KEY_UNIQUEID).toString(); 
    } 
} 

私もサブクラス化・ソリューションを好むだろうが、私はこれで行きました。 これは何らかの形で役立ちますように、他のソリューションも歓迎します。

+0

ニース。私はちょうどこの解決策について見つけた。あなたが言ったように、サブクラスのソリューションははるかに優れていますが、現時点ではこのソリューションは大丈夫です。ありがとう –