Android : Apache MINA doesn't run messageSent() after session.write()

on Monday, February 16, 2015


What could be the problem with Apache MINA when it won't call messageSent() method after writing to active session? My code works perfectly in simple Java client but doesn't work in Android application.


TCPClient's code:



if (session != null && session.isConnected()) {
throw new IllegalStateException("Already connected. Disconnect first.");
}

connector = new NioSocketConnector();
connector.getSessionConfig().setUseReadOperation(true);

try {
SslFilter sslFilter = new SslFilter(ClientSslContextFactory.getInstance());
sslFilter.setUseClientMode(true);
connector.getFilterChain().addFirst("sslFilter", sslFilter);

handler = new TCPHandler();
connector.setHandler(handler);
connector.getSessionConfig().setReadBufferSize(4096);

// try to connect to server
Log.d(TAG, "Connecting...");
ConnectFuture future = connector.connect(new InetSocketAddress(Const.hostIP, Const.sessionPort));
future.addListener(new IoFutureListener<IoFuture>() {

public void operationComplete(IoFuture future) {
ConnectFuture connFuture = (ConnectFuture) future;
if(connFuture.isConnected()){
Log.d(TAG, "Assigning session...");
session = future.getSession();

} else {
Log.e(TAG, "Not connected...exiting");
}
}
});
future.awaitUninterruptibly();
} catch (RuntimeIoException e) {
Log.e(TAG, "Failed to connect.");
e.printStackTrace();
} catch (IllegalArgumentException e) {
Log.e(TAG, "Failed to connect. Illegal Argument! Terminating program!");
e.printStackTrace();
} catch (GeneralSecurityException e) {
Log.e(TAG, "Failed to set SSL filter!");
e.printStackTrace();
}


TCPHandler's sending code:



@Override
public void sessionOpened(IoSession session) throws Exception {
super.sessionOpened(session);
Log.d(TAG, "Session opened...");

byte[] ba = ("stringasdfasdf\n").getBytes();
IoBuffer buffer = IoBuffer.allocate(ba.length);
buffer.put(ba);
buffer.flip();
session.write(buffer);
Log.d(TAG, "TCP writing executed.");
}

0 comments:

Post a Comment