package com.walker.tcp.netty; import com.walker.infrastructure.ServerId; import com.walker.infrastructure.utils.NumberGenerator; import com.walker.infrastructure.utils.StringUtils; import io.netty.channel.ChannelId; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.util.internal.SocketUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.nio.channels.SocketChannel; import java.util.List; /** * 生成长连接通道ID。自定义该对象。 * @author 时克英 * @date 2023-09-29 */ @Deprecated public class GenIdNioSocketChannel extends NioServerSocketChannel { protected final transient Logger logger = LoggerFactory.getLogger(getClass()); @Override protected int doReadMessages(List buf) throws Exception { SocketChannel ch = SocketUtils.accept(this.javaChannel()); try { if (ch != null) { // buf.add(new NioSocketChannel(this, ch)); buf.add(new GenIdClientSocketChannel(this, ch)); return 1; } } catch (Throwable var6) { logger.warn("Failed to create a new channel from an accepted socket.", var6); try { ch.close(); } catch (Throwable var5) { logger.warn("Failed to close a socket.", var5); } } return 0; } @Override protected ChannelId newId() { ChannelId channelId = new ChannelId() { @Override public String asShortText() { return new StringBuilder(ServerId.getId()) .append(StringUtils.STRING_UNDERLINE).append(NumberGenerator.getSequenceNumber()) .append(StringUtils.STRING_UNDERLINE).append(StringUtils.generateRandomNumber(8)).toString(); // return UUID.randomUUID().toString(); } @Override public String asLongText() { // return UUID.randomUUID().toString(); return new StringBuilder(ServerId.getId()) .append(StringUtils.STRING_UNDERLINE).append(NumberGenerator.getLongSequenceNumber()) .append(StringUtils.STRING_UNDERLINE).append(StringUtils.generateRandomNumber(8)).toString(); } @Override public int compareTo(ChannelId o) { return 0; } }; return channelId; } // /** // * 返回集群中主机服务ID编号,在集群中唯一。 // * @return // */ // public String getServerId() { // return serverId; // } // // public void setServerId(String serverId) { // this.serverId = serverId; // } // // private String serverId = "0"; }