1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| @Slf4j @Component @ServerEndpoint("/websocket/chat/from/{from}/to/{to}") public class WebSocketServer {
private static final Map<Integer, Session> sessionMap = new ConcurrentHashMap<>();
@OnOpen public void onOpen(Session session, @PathParam("from") Integer from) { log.info("accept connection userId={}", from); sessionMap.put(from, session); }
@SneakyThrows @OnClose public void onClose(@PathParam("from") Integer from) { log.info("close connection userId={}", from); sessionMap.remove(from); }
@OnMessage public void onMessage(String message, @PathParam("from") Integer from, @PathParam("to") Integer to) { log.info("Receive {} from userId={} to {}", message, from, to);
Session session = sessionMap.get(to); session.getAsyncRemote().sendText(message); }
@OnError public void onError(Session session, Throwable error) { log.error("error", error); }
}
|