package cc.mrbird.febs.common.websocket;
|
|
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.SimpleChannelInboundHandler;
|
import io.netty.channel.group.ChannelGroup;
|
import io.netty.channel.group.DefaultChannelGroup;
|
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
|
import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
|
import io.netty.util.concurrent.GlobalEventExecutor;
|
|
public class WebSocketServerHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {
|
|
public static ChannelGroup channels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);
|
|
@Override
|
public void handlerAdded(ChannelHandlerContext ctx) throws Exception {
|
channels.add(ctx.channel());
|
}
|
|
@Override
|
public void handlerRemoved(ChannelHandlerContext ctx) throws Exception {
|
channels.remove(ctx.channel());
|
}
|
|
@Override
|
public void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception {
|
String request = msg.text();
|
System.out.println("服务端收到:" + request);
|
|
// 广播消息给其他连接的客户端,不包括发送者自己
|
for (io.netty.channel.Channel channel : channels) {
|
if (channel != ctx.channel()) {
|
channel.writeAndFlush(new TextWebSocketFrame("[用户] " + request));
|
}
|
}
|
}
|
|
@Override
|
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
|
ctx.flush();
|
}
|
|
@Override
|
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
|
cause.printStackTrace();
|
ctx.close();
|
}
|
}
|