Я пытаюсь выполнить синхронную запись / чтение в клиентском приложении на основе demux с MINA 2.0 RC1, но, похоже, застрял. Вот мой код:
public boolean login(final String username, final String password) {
// block inbound messages
session.getConfig().setUseReadOperation(true);
// send the login request
final LoginRequest loginRequest = new LoginRequest(username, password);
final WriteFuture writeFuture = session.write(loginRequest);
writeFuture.awaitUninterruptibly();
if (writeFuture.getException() != null) {
session.getConfig().setUseReadOperation(false);
return false;
}
// retrieve the login response
final ReadFuture readFuture = session.read();
readFuture.awaitUninterruptibly();
if (readFuture.getException() != null) {
session.getConfig().setUseReadOperation(false);
return false;
}
// stop blocking inbound messages
session.getConfig().setUseReadOperation(false);
// determine if the login info provided was valid
final LoginResponse loginResponse = (LoginResponse)readFuture.getMessage();
return loginResponse.getSuccess();
}
Я вижу на стороне сервера, что объект LoginRequest получен и отправлено сообщение LoginResponse. На стороне клиента DemuxingProtocolCodecFactory
получает ответ, но после добавления некоторой регистрации я вижу, что клиент застревает при вызове readFuture.awaitUninterruptibly()
.
Я не могу понять, почему он застрял здесь, основываясь на моем собственном коде. Я правильно установил для операции чтения значение true в конфигурации сеанса, что означает, что сообщения должны быть заблокированы. Однако создается впечатление, что сообщение больше не существует к тому времени, когда я пытаюсь прочитать ответные сообщения синхронно.
Есть какие-нибудь подсказки, почему это не сработает для меня?