The IoSession returned by session = connectFuture.getSession() is different
than the one passed to sessionOpened(IoSession session)
-----------------------------------------------------------------------------------------------------------------------------------
Key: DIRMINA-404
URL: https://issues.apache.org/jira/browse/DIRMINA-404
Project: MINA
Issue Type: Bug
Affects Versions: 1.1.1
Environment: Windows XP
Reporter: Kevin Smeltzer
Priority: Trivial
// CLIENT MODULE
public class bgMinaClient extends IoHandlerAdapter
{
public static final int CONNECT_TIMEOUT = 10000;
private String host;
private int port;
private String tokenizer;
private SocketConnector connector;
private IoSession session;
private bgClientListener clientListener;
private ConnectFuture connectFuture;
public bgMinaClient(String host, int port, String tokenizer,
bgClientListener clientListener) {
this.host = host;
this.port = port;
this.tokenizer = tokenizer;
this.clientListener = clientListener;
connector = new SocketConnector();
connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new
bgCodecFactory(true)));
}
public void connect() {
// try to connect 5 times before giving up
int attempts = 5;
do {
connectFuture = connector.connect(new
InetSocketAddress(host,port), this);
connectFuture.join(CONNECT_TIMEOUT);
try
{
session = connectFuture.getSession();
}
catch (RuntimeIOException e)
{
clientListener.onException( e );
}
attempts--;
} while ( session == null && attempts > 0);
}
public void disconnect() {
if (session != null)
{
session.close().join(CONNECT_TIMEOUT);
session = null;
}
}
public void sessionOpened(IoSession session) throws Exception {
this.session = session;
clientListener.doConnect( session );
}
public void sessionClosed(IoSession session) throws Exception {
clientListener.doDisconnect();
}
public void sendRequest( bgClientRequest clientRequest ) {
if (session == null) {
clientListener.onException(new Throwable("not connected"));
}
else
{
session.write(clientRequest);
}
}
public void messageReceived( IoSession session, Object message) throws
Exception {
bgServerResponse response = (bgServerResponse) message;
Object o;
o = response.getObject();
clientListener.doServerAttached ( o );
}
}
public void exceptionCaught( Throwable cause) throws Exception {
clientListener.onException( cause );
}
}
// SERVER MODULE
public class bgMinaServer {
// defines how messages are split into parts
final String tokenizer;
// commPort used for communications
final int commPort;
// the acceptor object
IoAcceptor acceptor = null;
// the socket acceptor configuration
SocketAcceptorConfig cfg;
// the server handler object
bgMinaServerHandler handler;
bgServerListener serverListener;
public bgMinaServer ( int commPort, String tokenizer, bgServerListener
serverListener ) {
this.serverListener = serverListener;
this.commPort = commPort;
this.tokenizer = tokenizer;
ByteBuffer.setUseDirectBuffers(false);
ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
acceptor = new SocketAcceptor();
cfg = new SocketAcceptorConfig();
cfg.getSessionConfig().setReuseAddress( true );
//cfg.getFilterChain().addLast( "logger", new LoggingFilter() );
cfg.getFilterChain().addLast( "protocol", new ProtocolCodecFilter(new
bgCodecFactory(false)));
}
public void start() {
try {
handler = new bgMinaServerHandler();
handler.serverListener = this.serverListener;
handler.tokenizer = this.tokenizer;
acceptor.bind( new InetSocketAddress( commPort ), handler, cfg);
System.out.println("Game server started.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class bgMinaServerHandler extends IoHandlerAdapter {
// the objectthat will listen to the server commands
public bgServerListener serverListener;
// defines how messages are split into parts
String tokenizer;
public static final String CLIENT_KEY =
bgMinaServerHandler.class.getName() + ".CLIENTID";
public void exceptionCaught(IoSession session, Throwable t) throws
Exception {
// check to see if we are connected
if ( !session.isConnected() ) {
serverListener.doDisconnect( session );
// we are no longer conncted so we need to take this
client out of our
// currently connected client list
// but how?
// we could set a session attribute when the client
connects to
// equal his ID number
// then when he dosconnects we can remove him easily!
}
session.close();
}
public void messageReceived(IoSession session, Object message) throws
Exception {
// get the message from the network
bgClientRequest request = (bgClientRequest)message;
// holds tokenized messages used in networking communications
bgTokenizedMessage commMessage = new bgTokenizedMessage();
commMessage.setMessage ( request.getRequest(), tokenizer );
if ( !commMessage.hasMessage() )
return;
String command = commMessage.getNextToken();
if ( command.equalsIgnoreCase("REQUEST") ) {
serverListener.doClientRequest( session, commMessage );
}
if ( command.equalsIgnoreCase("ATTEMPT") ) {
serverListener.doClientAttempt( session, commMessage );
}
if ( command.equalsIgnoreCase("VOTE") ) {
serverListener.doClientVote( session, commMessage );
}
}
public void sessionOpened(IoSession session) throws Exception {
System.out.println("Client connected...");
if( session.getTransportType() == TransportType.SOCKET )
System.out.println("Receive buffer: " +
((SocketSessionConfig) session.getConfig() ).getReceiveBufferSize() );
}
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.