WebSocket.java

package com.alibaba.fastjson2.example.springtest.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;

import java.util.concurrent.ConcurrentHashMap;

@Slf4j
@Component
@ServerEndpoint("/websocket/{name}")
public class WebSocket {
    /**
     * ������������������������������������������������������������������������������
     */
    private Session session;

    /**
     * ���������������������������������������
     */
    private String name;

    /**
     * ���������������������������������������������������������������������������
     * ���������������kv,���������������������v��������������� WebSocket (������������������������������������MyWebSocket������)
     */
    private static ConcurrentHashMap<String, WebSocket> webSocketSet = new ConcurrentHashMap<>();

    /**
     * ���������������������������������
     * session���������������������������������������������������������������������������������
     */
    @OnOpen
    public void OnOpen(Session session, @PathParam(value = "name") String name) {
        log.info("----------------------------------");
        this.session = session;
        this.name = name;
        // name������������������������������������������������������������������������������������name���������
        webSocketSet.put(name, this);
        log.info("[WebSocket] ���������������������������������������={}", webSocketSet.size());
        log.info("----------------------------------");
        log.info("");

        GroupSending(name + " ������");
    }

    /**
     * ���������������������������
     */
    @OnClose
    public void OnClose() {
        webSocketSet.remove(this.name);
        log.info("[WebSocket] ���������������������������������������={}", webSocketSet.size());

        GroupSending(name + " ������");
    }

    /**
     * ���������������������������������������
     */
    @OnMessage
    public void OnMessage(String messageStr) {
        log.info("[WebSocket] ���������������{}", messageStr);
        //������������������������������������������������������
        //message_str��������� TOUSER:user2;message:aaaaaaaaaaaaaaaaaa;
        if (messageStr.indexOf("TOUSER") == 0) {
            //������ name���message������
            String[] split = messageStr.split(";");
            String[] split1 = split[0].split(":");
            String[] split2 = split[1].split(":");
            String name = split1[1];
            String message = split2[1];
            //������������
            AppointSending(name, message);
        } else {
            //������
            GroupSending(messageStr);
        }
    }

    /**
     * ���������������������
     *
     * @param session
     * @param error
     */
    @OnError
    public void onError(Session session, Throwable error) {
        log.info("������������");
        error.printStackTrace();
    }

    /**
     * ������
     *
     * @param message
     */
    public void GroupSending(String message) {
        for (String name : webSocketSet.keySet()) {
            try {
                webSocketSet.get(name).session.getBasicRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * ������������
     *
     * @param name
     * @param message
     */
    public void AppointSending(String name, String message) {
        try {
            webSocketSet.get(name).session.getBasicRemote().sendText(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}