package com.example.erp.tools.netty;
|
|
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.SimpleChannelInboundHandler;
|
import io.netty.handler.codec.http.FullHttpRequest;
|
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
public class MyWebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {
|
|
@Override
|
public void channelActive(ChannelHandlerContext ctx) throws Exception {
|
System.out.println("与客户端建立连接,通道开启!");
|
|
//添加到channelGroup通道组
|
MyChannelHandlerPool.channelGroup.add(ctx.channel());
|
}
|
|
@Override
|
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
|
System.out.println("与客户端断开连接,通道关闭!");
|
//添加到channelGroup 通道组
|
MyChannelHandlerPool.channelGroup.remove(ctx.channel());
|
}
|
|
@Override
|
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
|
//首次连接是FullHttpRequest,处理参数 by zhengkai.blog.csdn.net
|
if (null != msg && msg instanceof FullHttpRequest) {
|
FullHttpRequest request = (FullHttpRequest) msg;
|
String uri = request.uri();
|
|
Map paramMap=getUrlParams(uri);
|
System.out.println("接收到的参数是:"+paramMap);
|
//如果url包含参数,需要处理
|
if(uri.contains("?")){
|
String newUri=uri.substring(0,uri.indexOf("?"));
|
System.out.println(newUri);
|
request.setUri(newUri);
|
}
|
|
}else if(msg instanceof TextWebSocketFrame){
|
//正常的TEXT消息类型
|
TextWebSocketFrame frame=(TextWebSocketFrame)msg;
|
System.out.println("客户端收到服务器数据:" +frame.text());
|
sendAllMessage(frame.text());
|
}
|
super.channelRead(ctx, msg);
|
}
|
|
@Override
|
protected void channelRead0(ChannelHandlerContext channelHandlerContext, TextWebSocketFrame textWebSocketFrame) throws Exception {
|
|
}
|
|
public void sendAllMessage(String message){
|
//收到信息后,群发给所有channel
|
MyChannelHandlerPool.channelGroup.writeAndFlush( new TextWebSocketFrame(message));
|
}
|
|
private static Map getUrlParams(String url){
|
Map<String,String> map = new HashMap<>();
|
url = url.replace("?",";");
|
if (!url.contains(";")){
|
return map;
|
}
|
if (url.split(";").length > 0){
|
String[] arr = url.split(";")[1].split("&");
|
for (String s : arr){
|
String key = s.split("=")[0];
|
String value = s.split("=")[1];
|
map.put(key,value);
|
}
|
return map;
|
|
}else{
|
return map;
|
}
|
}
|
}
|