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