From de31e91aa2f38a717f2d4640a3197580ec1807a7 Mon Sep 17 00:00:00 2001
From: 钟日健 <5689795+arsn@user.noreply.gitee.com>
Date: Thu, 19 May 2022 11:23:51 +0800
Subject: [PATCH] 关闭websckot

---
 src/main/java/org/springblade/modules/webscoket/WebSocketHandler.java |  384 +++++++++++++++++++++++++++---------------------------
 1 files changed, 192 insertions(+), 192 deletions(-)

diff --git a/src/main/java/org/springblade/modules/webscoket/WebSocketHandler.java b/src/main/java/org/springblade/modules/webscoket/WebSocketHandler.java
index 3998d6c..9cdabc6 100644
--- a/src/main/java/org/springblade/modules/webscoket/WebSocketHandler.java
+++ b/src/main/java/org/springblade/modules/webscoket/WebSocketHandler.java
@@ -1,193 +1,193 @@
-package org.springblade.modules.webscoket;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
-import io.netty.channel.ChannelFuture;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.SimpleChannelInboundHandler;
-import io.netty.handler.codec.http.DefaultFullHttpResponse;
-import io.netty.handler.codec.http.FullHttpRequest;
-import io.netty.handler.codec.http.HttpResponseStatus;
-import io.netty.handler.codec.http.HttpVersion;
-import io.netty.handler.codec.http.websocketx.*;
-import io.netty.util.AttributeKey;
-import io.netty.util.CharsetUtil;
-import org.springblade.modules.nettyServer.NettyConfig;
-import org.springblade.modules.system.service.IUserService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-
-@Component
-public class WebSocketHandler extends SimpleChannelInboundHandler<Object> {
-
-	private WebSocketServerHandshaker handshaker;
-
-	private  String on=null;
-
-	@Autowired
-	private IUserService userService;
-
-	private static WebSocketHandler webSocketHandler;
-
-	@PostConstruct
-	public void init() {
-		webSocketHandler = this;
-	}
-
-	@Override
-	protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
-		if (msg instanceof FullHttpRequest) {
-			//以http请求形式接入,但是走的是websocket
-			handleHttpRequest(ctx, (FullHttpRequest) msg);
-		} else if (msg instanceof WebSocketFrame) {
-			//处理websocket客户端的消息
-			handlerWebSocketFrame(ctx, (WebSocketFrame) msg);
-		}
-	}
-
-	/**
-	 * 客户端加入连接
-	 * @param ctx
-	 * @throws Exception
-	 */
-	@Override
-	public void channelActive(ChannelHandlerContext ctx) throws Exception {
-		//添加连接
-		System.out.println("客户端加入连接:" + ctx.channel());
-		//ChannelSupervise.addChannel(ctx.channel());
-	}
-
-	/**
-	 * 客户端离开连接
-	 * @param ctx
-	 * @throws Exception
-	 */
-	@Override
-	public void channelInactive(ChannelHandlerContext ctx) throws Exception {
-		//断开连接
-		System.out.println("客户端断开连接:" + ctx.channel());
-		//用户离线状态
-		String name = ChannelSupervise.findName(ctx.channel().id().asShortText());
-		if ( name != null &&!name.equals("ping") ){
-			String num="0";
-			//工作状态(0闲置,1工作中)
-			String workSt = "0";
-//			webSocketHandler.userService.updateUser(num,name,workSt);
-			//ChannelSupervise.removeChannel(ctx.channel());
-
-			NettyConfig.getChannelGroup().remove(ctx.channel());
-			removeUserId(ctx);
-		}
-	}
-
-	@Override
-	public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
-		ctx.flush();
-	}
-
-	private void handlerWebSocketFrame(ChannelHandlerContext ctx, WebSocketFrame frame) throws NumberFormatException, Exception {
-		System.out.println("ctx = " + ctx);
-		System.out.println("frame = " + frame);
-		// 判断是否关闭链路的指令
-		if (frame instanceof CloseWebSocketFrame) {
-			handshaker.close(ctx.channel(), (CloseWebSocketFrame) frame.retain());
-			return;
-		}
-		// 判断是否ping消息
-		if (frame instanceof PingWebSocketFrame) {
-			ctx.channel().write(
-				new PongWebSocketFrame(frame.content().retain()));
-			return;
-		}
-		// 本例程仅支持文本消息,不支持二进制消息
-		if (!(frame instanceof TextWebSocketFrame)) {
-			System.out.println("本例程仅支持文本消息,不支持二进制消息");
-			throw new UnsupportedOperationException(String.format(
-				"%s frame types not supported", frame.getClass().getName()));
-		}
-		// 返回应答消息
-		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);
-			//用户在线状态
-			this.on=request;
-			//在线状态(0掉线,1在线)
-			String num="1";
-			//工作状态(0闲置,1工作中)
-			String workSt = "0";
-//			webSocketHandler.userService.updateUser(num,request,workSt);
-		}
-
-	}
-
-	/**
-	 * 唯一的一次http请求,用于创建websocket
-	 *
-	 * @throws InterruptedException
-	 */
-	private void handleHttpRequest(final ChannelHandlerContext ctx,
-								   FullHttpRequest req) throws InterruptedException {
-		//要求Upgrade为websocket,过滤掉get/Post
-		if (!req.decoderResult().isSuccess() || (!"websocket".equals(req.headers().get("Upgrade")))) {
-			//若不是websocket方式,则创建BAD_REQUEST的req,返回给客户端
-			sendHttpResponse(ctx, req, new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.BAD_REQUEST));
-			return;
-		}
-		//握手
-		WebSocketServerHandshakerFactory wsFactory = new WebSocketServerHandshakerFactory(
-			"ws://localhost:9034/websocket", null, false);
-		handshaker = wsFactory.newHandshaker(req);
-		if (handshaker == null) {
-			WebSocketServerHandshakerFactory
-				.sendUnsupportedVersionResponse(ctx.channel());
-		} else {
-			handshaker.handshake(ctx.channel(), req);
-		}
-	}
-
-	/**
-	 * 拒绝不合法的请求,并返回错误信息
-	 */
-	private static void sendHttpResponse(ChannelHandlerContext ctx,
-                                         FullHttpRequest req, DefaultFullHttpResponse res) {
-		// 返回应答给客户端
-		if (res.status().code() != 200) {
-			ByteBuf buf = Unpooled.copiedBuffer(res.status().toString(),
-				CharsetUtil.UTF_8);
-			res.content().writeBytes(buf);
-			buf.release();
-		}
-		ChannelFuture f = ctx.channel().writeAndFlush(res);
-		// 如果是非Keep-Alive,关闭连接
-//		if (!isKeepAlive(req) || res.status().code() != 200) {
-//			f.addListener(ChannelFutureListener.CLOSE);
+//package org.springblade.modules.webscoket;
+//
+//import io.netty.buffer.ByteBuf;
+//import io.netty.buffer.Unpooled;
+//import io.netty.channel.ChannelFuture;
+//import io.netty.channel.ChannelHandlerContext;
+//import io.netty.channel.SimpleChannelInboundHandler;
+//import io.netty.handler.codec.http.DefaultFullHttpResponse;
+//import io.netty.handler.codec.http.FullHttpRequest;
+//import io.netty.handler.codec.http.HttpResponseStatus;
+//import io.netty.handler.codec.http.HttpVersion;
+//import io.netty.handler.codec.http.websocketx.*;
+//import io.netty.util.AttributeKey;
+//import io.netty.util.CharsetUtil;
+//import org.springblade.modules.nettyServer.NettyConfig;
+//import org.springblade.modules.system.service.IUserService;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.stereotype.Component;
+//
+//import javax.annotation.PostConstruct;
+//
+//@Component
+//public class WebSocketHandler extends SimpleChannelInboundHandler<Object> {
+//
+//	private WebSocketServerHandshaker handshaker;
+//
+//	private  String on=null;
+//
+//	@Autowired
+//	private IUserService userService;
+//
+//	private static WebSocketHandler webSocketHandler;
+//
+//	@PostConstruct
+//	public void init() {
+//		webSocketHandler = this;
+//	}
+//
+//	@Override
+//	protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
+//		if (msg instanceof FullHttpRequest) {
+//			//以http请求形式接入,但是走的是websocket
+//			handleHttpRequest(ctx, (FullHttpRequest) msg);
+//		} else if (msg instanceof WebSocketFrame) {
+//			//处理websocket客户端的消息
+//			handlerWebSocketFrame(ctx, (WebSocketFrame) msg);
 //		}
-	}
-	@Override
-	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
-		cause.printStackTrace();
-		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);
-	}
-
-}
+//	}
+//
+//	/**
+//	 * 客户端加入连接
+//	 * @param ctx
+//	 * @throws Exception
+//	 */
+//	@Override
+//	public void channelActive(ChannelHandlerContext ctx) throws Exception {
+//		//添加连接
+//		System.out.println("客户端加入连接:" + ctx.channel());
+//		//ChannelSupervise.addChannel(ctx.channel());
+//	}
+//
+//	/**
+//	 * 客户端离开连接
+//	 * @param ctx
+//	 * @throws Exception
+//	 */
+//	@Override
+//	public void channelInactive(ChannelHandlerContext ctx) throws Exception {
+//		//断开连接
+//		System.out.println("客户端断开连接:" + ctx.channel());
+//		//用户离线状态
+//		String name = ChannelSupervise.findName(ctx.channel().id().asShortText());
+//		if ( name != null &&!name.equals("ping") ){
+//			String num="0";
+//			//工作状态(0闲置,1工作中)
+//			String workSt = "0";
+////			webSocketHandler.userService.updateUser(num,name,workSt);
+//			//ChannelSupervise.removeChannel(ctx.channel());
+//
+//			NettyConfig.getChannelGroup().remove(ctx.channel());
+//			removeUserId(ctx);
+//		}
+//	}
+//
+//	@Override
+//	public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
+//		ctx.flush();
+//	}
+//
+//	private void handlerWebSocketFrame(ChannelHandlerContext ctx, WebSocketFrame frame) throws NumberFormatException, Exception {
+//		System.out.println("ctx = " + ctx);
+//		System.out.println("frame = " + frame);
+//		// 判断是否关闭链路的指令
+//		if (frame instanceof CloseWebSocketFrame) {
+//			handshaker.close(ctx.channel(), (CloseWebSocketFrame) frame.retain());
+//			return;
+//		}
+//		// 判断是否ping消息
+//		if (frame instanceof PingWebSocketFrame) {
+//			ctx.channel().write(
+//				new PongWebSocketFrame(frame.content().retain()));
+//			return;
+//		}
+//		// 本例程仅支持文本消息,不支持二进制消息
+//		if (!(frame instanceof TextWebSocketFrame)) {
+//			System.out.println("本例程仅支持文本消息,不支持二进制消息");
+//			throw new UnsupportedOperationException(String.format(
+//				"%s frame types not supported", frame.getClass().getName()));
+//		}
+//		// 返回应答消息
+//		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);
+//			//用户在线状态
+//			this.on=request;
+//			//在线状态(0掉线,1在线)
+//			String num="1";
+//			//工作状态(0闲置,1工作中)
+//			String workSt = "0";
+////			webSocketHandler.userService.updateUser(num,request,workSt);
+//		}
+//
+//	}
+//
+//	/**
+//	 * 唯一的一次http请求,用于创建websocket
+//	 *
+//	 * @throws InterruptedException
+//	 */
+//	private void handleHttpRequest(final ChannelHandlerContext ctx,
+//								   FullHttpRequest req) throws InterruptedException {
+//		//要求Upgrade为websocket,过滤掉get/Post
+//		if (!req.decoderResult().isSuccess() || (!"websocket".equals(req.headers().get("Upgrade")))) {
+//			//若不是websocket方式,则创建BAD_REQUEST的req,返回给客户端
+//			sendHttpResponse(ctx, req, new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.BAD_REQUEST));
+//			return;
+//		}
+//		//握手
+//		WebSocketServerHandshakerFactory wsFactory = new WebSocketServerHandshakerFactory(
+//			"ws://localhost:9034/websocket", null, false);
+//		handshaker = wsFactory.newHandshaker(req);
+//		if (handshaker == null) {
+//			WebSocketServerHandshakerFactory
+//				.sendUnsupportedVersionResponse(ctx.channel());
+//		} else {
+//			handshaker.handshake(ctx.channel(), req);
+//		}
+//	}
+//
+//	/**
+//	 * 拒绝不合法的请求,并返回错误信息
+//	 */
+//	private static void sendHttpResponse(ChannelHandlerContext ctx,
+//                                         FullHttpRequest req, DefaultFullHttpResponse res) {
+//		// 返回应答给客户端
+//		if (res.status().code() != 200) {
+//			ByteBuf buf = Unpooled.copiedBuffer(res.status().toString(),
+//				CharsetUtil.UTF_8);
+//			res.content().writeBytes(buf);
+//			buf.release();
+//		}
+//		ChannelFuture f = ctx.channel().writeAndFlush(res);
+//		// 如果是非Keep-Alive,关闭连接
+////		if (!isKeepAlive(req) || res.status().code() != 200) {
+////			f.addListener(ChannelFutureListener.CLOSE);
+////		}
+//	}
+//	@Override
+//	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
+//		cause.printStackTrace();
+//		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