From f3d3ab1267f35a6d4b22b7a34f5f94bb733cd513 Mon Sep 17 00:00:00 2001
From: zengh <123456>
Date: Wed, 07 Apr 2021 17:39:43 +0800
Subject: [PATCH] 点对点websocket实现
---
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocketHandler.java | 24 +++++++++++++++++++++++-
1 files changed, 23 insertions(+), 1 deletions(-)
diff --git a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocketHandler.java b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocketHandler.java
index 3d6b0cd..07ac3c2 100644
--- a/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocketHandler.java
+++ b/blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocketHandler.java
@@ -14,9 +14,11 @@
import io.netty.handler.codec.http.websocketx.WebSocketFrame;
import io.netty.handler.codec.http.websocketx.WebSocketServerHandshaker;
import io.netty.handler.codec.http.websocketx.WebSocketServerHandshakerFactory;
+import io.netty.util.AttributeKey;
import io.netty.util.CharsetUtil;
import java.util.Date;
+import org.springblade.jfpt.nettyServer.NettyConfig;
import org.springblade.jfpt.suser.service.ISuserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -69,7 +71,10 @@
//工作状态(0闲置,1工作中)
String workSt = "0";
webSocketHandler.suserService.updateUser(num,name,workSt);
- ChannelSupervise.removeChannel(ctx.channel());
+ //ChannelSupervise.removeChannel(ctx.channel());
+
+ NettyConfig.getChannelGroup().remove(ctx.channel());
+ removeUserId(ctx);
}
}
@@ -100,6 +105,13 @@
String request = ((TextWebSocketFrame) frame).text();
if (!request.equals("ping")){
+
+ NettyConfig.getUserChannelMap().put(request,ctx.channel());
+
+ //将用户id作为自定义属性加入到channel 中,方便随时channel中获取用户id
+ AttributeKey<String> key = AttributeKey.valueOf("userId");
+ ctx.channel().attr(key).setIfAbsent(request);
+
//把用户信息添加到通道里
ChannelSupervise.addChannel(ctx.channel(),request);
//用户在线状态
@@ -169,4 +181,14 @@
ctx.close();
}
+ /**
+ * 删除用户与channel 对应关系
+ * @param ctx
+ */
+ private void removeUserId(ChannelHandlerContext ctx){
+ AttributeKey<String> key = AttributeKey.valueOf("userId");
+ String userId = ctx.channel().attr(key).get();
+ NettyConfig.getUserChannelMap().remove(userId);
+ }
+
}
--
Gitblit v1.9.3