diff --git a/rest-api/src/main/java/tools/simrail/backend/api/event/EventWebsocketHandler.java b/rest-api/src/main/java/tools/simrail/backend/api/event/EventWebsocketHandler.java index 2c4b4b0..1c3306e 100644 --- a/rest-api/src/main/java/tools/simrail/backend/api/event/EventWebsocketHandler.java +++ b/rest-api/src/main/java/tools/simrail/backend/api/event/EventWebsocketHandler.java @@ -32,6 +32,7 @@ import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.PingMessage; import org.springframework.web.socket.PongMessage; +import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketMessage; import org.springframework.web.socket.WebSocketSession; @@ -54,8 +55,8 @@ public EventWebsocketHandler(@Nonnull EventSessionManager sessionManager) { @Override @SuppressWarnings("unchecked") public void afterConnectionEstablished(@Nonnull WebSocketSession session) { - // don't allow any data to be sent from the client - session.setTextMessageSizeLimit(0); + // don't allow any data to be sent from the client, except for ping messages + session.setTextMessageSizeLimit(4); session.setBinaryMessageSizeLimit(0); // get the frame types added by the handshake interceptor and register the session @@ -79,6 +80,8 @@ public void handleMessage(@Nonnull WebSocketSession session, @Nonnull WebSocketM case PingMessage _ -> eventSession.sendPong(); // received pong from the client, mark the client as alive case PongMessage _ -> eventSession.handlePongReceive(); + // client sends a ping in form of a text message, respond with a pong text message + case TextMessage tm when tm.getPayload().equals("ping") -> eventSession.sendPongText(); // reject all other type of websocket messages being sent by the client default -> session.close(CloseStatus.NOT_ACCEPTABLE); } diff --git a/rest-api/src/main/java/tools/simrail/backend/api/event/session/EventWebsocketSession.java b/rest-api/src/main/java/tools/simrail/backend/api/event/session/EventWebsocketSession.java index b9ffb15..c2d9556 100644 --- a/rest-api/src/main/java/tools/simrail/backend/api/event/session/EventWebsocketSession.java +++ b/rest-api/src/main/java/tools/simrail/backend/api/event/session/EventWebsocketSession.java @@ -85,6 +85,13 @@ public void sendPong() throws IOException { this.webSocketSession.sendMessage(new PongMessage()); } + /** + * Sends out a text message with the data "pong". + */ + public void sendPongText() throws IOException { + this.sendText("pong"); + } + /** * Sends the given text as a text frame to the websocket connection. *