Apache Mina, создай свою собственную IoSession: как? - PullRequest
2 голосов
/ 03 августа 2011

Я играю в течение нескольких дней с Apache Mina, и я хочу спросить вас, как я могу создать, расширяя (или внедряя) IoSession для создания чего-то вроде MyIoSession.

Причина, по которой я хочу сделатьэто потому, что в классе Handler я хочу что-то вроде этого:

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
    }
}

Таким образом, MyIoSession будет иметь некоторый уникальный идентификатор, и таким образом я буду определять, какой клиент отправляет сообщения на сервер.

Также, если есть другие лучшие способы достичь этого, не стесняйтесь, сообщите мне.

Спасибо

1 Ответ

2 голосов
/ 03 августа 2011

У меня была похожая проблема, когда я хотел сохранить определенную информацию в IoSession, так же, как вы хотите с уникальным идентификатором.Поскольку я не нашел, как правильно расширить весь этот беспорядок (я искал место, где я мог бы передать что-то вроде IoSessionFactory, чтобы MINA создала мою собственную реализацию IoSession), я использовал 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();
    }
}

Я бы тоже предпочел решение подклассов, но я просто пошел с этим.Надеюсь, что это поможет в любом случае, другие решения будут приветствоваться.

...