У меня есть приложение Flex, которое подключается к серверу BlazeDS по каналу StreamingAMF.
На стороне сервера логика обрабатывается специальным адаптером, который расширяет ActionScriptAdapter и реализует интерфейсы FlexSessionListener и FlexClientListener.
Я спрашиваю, как я могу определить, какой "flex-client" закрыл соединение, когда, например, пользователь закрывает браузер? (так что я могу очистить некоторые данные в базе данных)
Я пытался использовать следующее:
1. Чтобы вручную управлять сообщениями команд:
@Override
public Object manage(final CommandMessage commandMessage) {
switch (commandMessage.getOperation()) {
case CommandMessage.SUBSCRIBE_OPERATION:
System.out.println("SUBSCRIBE_OPERATION = " + commandMessage.getHeaders());
break;
case CommandMessage.UNSUBSCRIBE_OPERATION:
System.out.println("UNSUBSCRIBE_OPERATION = " + commandMessage.getHeaders());
break;
}
return super.manage(commandMessage);
}
Но clientID всегда отличаются от тех, которые пришли.
2. Прослушивание событий sessionDestroyed и clientDestroyed
@Override
public void clientCreated(final FlexClient client) {
client.addClientDestroyedListener(this);
System.out.println("clientCreated = " + client.getId());
}
@Override
public void clientDestroyed(final FlexClient client) {
System.out.println("clientDestroyed = " + client.getId());
}
@Override
public void sessionCreated(final FlexSession session) {
System.out.println("sessionCreated = " + session.getId());
session.addSessionDestroyedListener(this);
}
@Override
public void sessionDestroyed(final FlexSession session) {
System.out.println("sessionDestroyed = " + session.getId());
}
Но эти методы sessionDestroyed и clientDestroyed никогда не вызываются. (