南昌市物联网技防平台-后台
zengh
2021-04-07 f3d3ab1267f35a6d4b22b7a34f5f94bb733cd513
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);
   }
}