В чем может быть проблема с Apache MINA, если он не вызывает метод messageSent()
после записи в активный сеанс? Мой код отлично работает в простом клиенте Java, но не работает в приложении Android.
Код TCPClient:
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:
@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.");
}