|
@@ -1,5 +1,7 @@
|
|
|
package thyyxxk.webserver.websocket;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import thyyxxk.webserver.config.exception.ExceptionEnum;
|
|
@@ -10,6 +12,7 @@ import javax.websocket.server.ServerEndpoint;
|
|
|
import java.io.IOException;
|
|
|
import java.util.Map;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
|
|
/**
|
|
@@ -24,6 +27,11 @@ public class WebSocketServer {
|
|
|
|
|
|
@OnOpen
|
|
|
public void onOpen(Session session, @PathParam("sid") String sid) {
|
|
|
+ SESSION_MAP.forEach((item, index) -> {
|
|
|
+ if (sid.split("-")[0].equals(item.split("-")[0])) {
|
|
|
+ sendMessageByWebSocketSidSingle(item);
|
|
|
+ }
|
|
|
+ });
|
|
|
SESSION_MAP.put(sid, session);
|
|
|
ONLINE_COUNT.incrementAndGet();
|
|
|
log.info("有新连接加入:{},当前在线人数为:{}", sid, ONLINE_COUNT.get());
|
|
@@ -102,6 +110,23 @@ public class WebSocketServer {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 单个登陆不能有多个账号同时登陆
|
|
|
+ *
|
|
|
+ * @param sid 被挤掉的连接
|
|
|
+ */
|
|
|
+ public static void sendMessageByWebSocketSidSingle(String sid) {
|
|
|
+ JSONObject obj = new JSONObject();
|
|
|
+ obj.put("name", "sidSingle");
|
|
|
+ try {
|
|
|
+ SESSION_MAP.get(sid).getBasicRemote().sendText(obj.toString());
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ log.error("【sid: " + sid + "】Socket根据单点登陆错误", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
public static void sendMessageToAll(String message) {
|
|
|
for (Session session : SESSION_MAP.values()) {
|
|
|
try {
|