2010-01-07 14 views
1

Je tente de démarrer avec MINA, et tous les exemples semblent avoir des données écrites dans la session, plutôt que d'utiliser une méthode qui peut écrire le même type de données encore et encore.Comment envoyer correctement des données via MINA?

Je suis en train d'utiliser org.apache.mina.filter.codec.demux.MessageEncoder/MessageDecoder à encode/decode messages, ce qui me permettra de toujours appliquer la tâche dans un emplacement central au lieu de le faire en ligne dans le code, comme les exemples font.

Disons que j'ai un ProtocolCodecFactory (qui étend DemuxingProtocolCodecFactory) qui a une LoginRequestEncoder (qui met en œuvre MessageEncoder<LoginRequest>, et a été ajouté par la méthode addMessageEncoder de l'usine). Cela signifie-t-il qu'au lieu d'appeler directement session.write() avec les données de nom d'utilisateur/mot de passe, je devrais plutôt faire quelque chose comme ça?

LoginRequest request = new LoginRequest(username, password); 
new ProtocolCodecFactory() 
    .getEncoder(session) 
    .encode(session, request, someProtocolEncoderOutput); 

Je ne vais pas mentir ... MINA semble comme il est censé simplifier le processus de mise en réseau, et je suis sûr que ce sera quand je reçois une poignée là-dessus, mais je suis tout à fait juste confus à présent.

Répondre

2

Il s'avère que vous pouvez simplement envoyer une demande via IoSession.write(). Voici un exemple simple basé sur ma question originale:

LoginRequest request = new LoginRequest(username, password); 
session.write(request);