package org.springblade.modules.nettyServer;
|
|
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.Unpooled;
|
import io.netty.channel.Channel;
|
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelInboundHandlerAdapter;
|
import io.netty.channel.group.ChannelGroup;
|
import io.netty.channel.group.ChannelMatcher;
|
import io.netty.channel.group.DefaultChannelGroup;
|
import io.netty.util.CharsetUtil;
|
import io.netty.util.concurrent.GlobalEventExecutor;
|
import org.springblade.modules.alarm.service.IAlarmService;
|
import org.springblade.modules.alarm.vo.AlarmVO;
|
import org.springblade.modules.catalog.service.catalogService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.PostConstruct;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
|
@Component
|
public class ServerHandler extends ChannelInboundHandlerAdapter {
|
|
@Autowired
|
private catalogService catalogService;
|
|
private static ServerHandler serverHandler;
|
|
@PostConstruct
|
public void init() {
|
serverHandler = this;
|
}
|
/**
|
* 客户端与服务端创建连接的时候调用
|
*/
|
@Override
|
public void channelActive(ChannelHandlerContext ctx) throws Exception {
|
System.out.println("客户端与服务端连接开始...");
|
System.out.println("Channel:"+ctx.channel());
|
NettyConfig.group.add(ctx.channel());
|
}
|
|
/**
|
* 客户端与服务端断开连接时调用
|
*/
|
@Override
|
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
|
System.out.println("客户端与服务端连接关闭...");
|
NettyConfig.group.remove(ctx.channel());
|
}
|
|
/**
|
* 服务端接收客户端发送过来的数据结束之后调用
|
*/
|
@Override
|
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
|
ctx.flush();
|
System.out.println("信息接收完毕...");
|
}
|
|
/**
|
* 工程出现异常的时候调用
|
*/
|
@Override
|
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
|
cause.printStackTrace();
|
ctx.close();
|
}
|
|
/**
|
* 服务端处理客户端websocket请求的核心方法,这里接收了客户端发来的信息
|
*/
|
@Override
|
public void channelRead(ChannelHandlerContext channelHandlerContext, Object info) throws Exception {
|
System.out.println("接收到了:"+info);
|
ByteBuf buf = (ByteBuf) info;
|
byte[] req = new byte[buf.readableBytes()];
|
buf.readBytes(req);
|
String body = new String(req, "UTF-8");
|
System.out.println("接收客户端数据:" + body);
|
channelHandlerContext.writeAndFlush(Unpooled.copiedBuffer("LEOK#@!", CharsetUtil.UTF_8));
|
List<Map<String, Object>> list = serverHandler.catalogService.selectCatalogList();
|
System.out.println(list);
|
// ByteBuf pingMessage = Unpooled.buffer();
|
// pingMessage.writeBytes(req);
|
// channelHandlerContext.writeAndFlush(pingMessage);
|
|
|
//服务端使用这个就能向 每个连接上来的客户端群发消息
|
//NettyConfig.group.writeAndFlush(info);
|
Iterator<Channel> iterator = NettyConfig.group.iterator();
|
System.out.println("iterator:"+iterator);
|
while(iterator.hasNext()){
|
//打印出所有客户端的远程地址
|
System.out.println((iterator.next()).remoteAddress());
|
|
}
|
}
|
|
|
|
|
}
|