From 6971c195601ecc91b2b7b52af83efed9956dcfe0 Mon Sep 17 00:00:00 2001
From: zengh <123456>
Date: Fri, 09 Apr 2021 09:22:49 +0800
Subject: [PATCH] 接口提供:根据设备编码

---
 blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/webscoket/WebSocketHandler.java |   56 ++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 42 insertions(+), 14 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 19d15be..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;
@@ -64,11 +66,16 @@
 		System.out.println("客户端断开连接:" + ctx.channel());
 		//用户离线状态
 		String name = ChannelSupervise.findName(ctx.channel().id().asShortText());
-		String num="0";
-		//工作状态(0闲置,1工作中)
-		String workSt = "0";
-		webSocketHandler.suserService.updateUser(num,name,workSt);
-		ChannelSupervise.removeChannel(ctx.channel());
+		if ( name != null &&!name.equals("ping") ){
+			String num="0";
+			//工作状态(0闲置,1工作中)
+			String workSt = "0";
+			webSocketHandler.suserService.updateUser(num,name,workSt);
+			//ChannelSupervise.removeChannel(ctx.channel());
+
+			NettyConfig.getChannelGroup().remove(ctx.channel());
+			removeUserId(ctx);
+		}
 	}
 
 	@Override
@@ -96,15 +103,26 @@
 		}
 		// 返回应答消息
 		String request = ((TextWebSocketFrame) frame).text();
-		//把用户信息添加到通道里
-		ChannelSupervise.addChannel(ctx.channel(),request);
-		//用户在线状态
-		this.on=request;
-		//在线状态(0掉线,1在线)
-		String num="1";
-		//工作状态(0闲置,1工作中)
-		String workSt = "0";
-		webSocketHandler.suserService.updateUser(num,request,workSt);
+
+		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);
+			//用户在线状态
+			this.on=request;
+			//在线状态(0掉线,1在线)
+			String num="1";
+			//工作状态(0闲置,1工作中)
+			String workSt = "0";
+			webSocketHandler.suserService.updateUser(num,request,workSt);
+		}
+
 		TextWebSocketFrame tws = new TextWebSocketFrame(new Date().toString()
 			+ ctx.channel().id() + ":" + ctx.channel());
 		// 返回【谁发的发给谁】
@@ -163,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