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);     }
 
  }
   |