WebSocket汎用テンプレート

1606 ワード

@ServerEndpoint("/websocket/{userId}")
@Component
public class WebSocketServer {

    private Logger logger = LoggerFactory.getLogger(WebSocketServer.class);

    //concurrent      Set,            MyWebSocket  。
    private static ConcurrentHashMap webSocketSet = new ConcurrentHashMap<>();

    //   
    private Session session;

    //   id
    private Long userId;

    //           
    @OnMessage
    public void handleMessage(Session session, String message) {
        logger.info("        ");
    }

    //            
    @OnOpen
    public void onOpen(Session session, @PathParam("userId")Long userId){
        logger.info("  webSocket   ");
        this.session = session;
        this.userId = userId;
        webSocketSet.put(userId, this);
    }

    //          
    @OnClose
    public void onClose() {
        logger.info("  socket  ");
        webSocketSet.remove(userId);
    }

    //          
    @OnError
    public void onError(Session session, Throwable err) {
        logger.info("    ");
        err.printStackTrace();
    }

    //         ,          
    public void sendMessage(String message, Long userId) {
        try {
          if(webSocketSet.get(userId) != null) {
              webSocketSet.get(userId).sendMessage(message);
          }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void sendMessage(String message) throws IOException {
        this.session.getBasicRemote().sendText(message);
    }

}