Jetty WebSocket - требуется сеанс onWebSocketClose - PullRequest
0 голосов
/ 05 августа 2020

Я изо всех сил пытаюсь узнать сеанс при получении события onWebSocketClose. Официальные документы: https://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/websocket/api/WebSocketAdapter.html#onWebSocketClose (int, java .lang.String)

В нем говорится, что есть два параметра: onWebSocketClose​(int statusCode, java.lang.String reason)

Другой сайт говорит, что есть 3 параметра: https://www.eclipse.org/jetty/documentation/current/jetty-websocket-api-annotations.html

@OnWebSocketClose
An optional method level annotation.

Flags one method in the class as receiving the On Close event.

Method signature must be public, not abstract, and return void.

The method parameters:

Session (optional)
int closeCode (required)
String closeReason (required)

В настоящее время в WebSocketOpen я добавляю сеанс в коллекцию следующим образом:

private static Set<Session> connections = Collections.synchronizedSet(new HashSet<Session>());
private static final Logger logger = LogManager.getLogger(WebSocketEvent.class);

@Override
public void onWebSocketConnect(Session session)
{
    super.onWebSocketConnect(session);
    connections.add(session);
    logger.debug("Socket Connected: " + session);
}

И на WebSocketClose я хочу чтобы снова удалить этот сеанс, например:

   @Override
    public void onWebSocketClose(Session session, int statusCode, String reason)
    {
        super.onWebSocketClose(session,statusCode,reason);
        logger.debug("Connection closed. IP: " + session.getRemoteAddress().getAddress().toString()+ "; rc: "+statusCode+ "; reason: "+ reason);
        connections.remove(session);
        logger.debug("Session with following IP removed from list: " + session.getRemoteAddress().getAddress().toString());
    }

Но кажется, что необязательный параметр сеанса недоступен, как описано в официальных документах, поэтому он отмечает его как ошибку.

Любая идея, как решить это? Заранее спасибо!

1 Ответ

0 голосов
/ 05 августа 2020

Хорошо, я узнал. В событии WebSocketClose в этом объекте доступен метод getSession ().

@Override
public void onWebSocketClose(int statusCode, String reason)
{
    connections.remove(this.getSession());
    super.onWebSocketClose(statusCode,reason);
    logger.debug("Connection closed. rc: "+statusCode+ "; reason: "+ reason);
}
...