В моем приложении у меня есть обработчик сеанса, который хранит все подключенные сеансы, когда они соединяются и удаляют их, если они правильно отсоединяются. Если они этого не сделают, я продолжаю сеансы, и если они снова подключатся, я заменяю старый сеанс новым. (Приведенный ниже код, кажется глупым, но это только, чтобы сделать мою точку)Проверка соединения с веб-сервером Java, если тот же пользователь повторно подключается
@ServerEndpoint(value = "/games")
public class GameEndPoint {
@Inject
private GameSessionHandler sessionHandler;
@OnOpen
public void open(Session session) {
sessionHandler.addSession(session);
}
@OnClose
public void close(Session session, CloseReason closeReason) {
sessionHandler.sessionClosed(session, closeReason.getCloseCode());
}
@OnError
public void onError(Throwable error) {
LOGGER.log(Level.SEVERE, "Socket connection error", error);
}
@OnMessage
public String handleMessage(String payload, Session session) {
return payload;
}
}
@Singleton
public class GameSessionHandler implements Serializable {
private final Set<Session> sessions = new HashSet<>();
public void addSession(Session session) {
for(Session existing: sessions) {
if(existing.equals(session)) {//DOES NOT WORK
//client reconnected!
sessions.remove(existing);
break;
}
}
sessions.add(session);
}
public void removeSession(Session session) {
if (CloseReason.CloseCodes.NORMAL_CLOSURE.equals(reason)) {
sessions.remove(session)
}
}
}
Проблема: как я могу проверить, что сеанс для клиента, который был подключен раньше, так что я могу заменить сессию с новым открытым?
Редактировать: Это необходимо, потому что мой клиент является приложением html5, где пользователь может обновлять/перемещаться по странице, а затем соединение теряется. Всякий раз, когда он пытается снова подключиться, я хочу знать, в какую игру он играл. Если пользователь находится на неустойчивом соединении (то есть на мобильном телефоне), время от времени будет потеряно соединение.