package com.ld.igds.io.fzzy.server; import com.ld.igds.io.fzzy.ServerUtils; import com.ld.io.api.InvokeResult; import com.ld.io.api.IoServerOption; import com.ld.io.api.IoSession; import com.ld.io.api.IoSessionQuery; import com.ld.io.netty.NettyServer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * 风正致远协议Server启动类 */ @Slf4j @Service public class BhznQuantityServerEngine { public static final Integer PORT = 9306; @Autowired private BhznQuantityMessageConsumer defaultMessageConsumer; @Autowired private BhznQuantitySessionListener defaultSessionListener; private IoSessionQuery sessionQuery; public void start(Integer port) { IoServerOption ioServerOption = new IoServerOption(); if (null != port) { ioServerOption.setPort(port); } else { ioServerOption.setPort(PORT); } ioServerOption.setDelimiter(ServerUtils.MSG_END.getBytes()); NettyServer ioServer = new NettyServer(ioServerOption, defaultMessageConsumer, defaultSessionListener); ioServer.startup(); sessionQuery = ioServer.getSessionQuery(); log.info("* "); log.info("* ========================"); log.info("* "); log.info("* [QUANTITY-FZZY-SERVER:FZZY_TCP_QUANTITY_V3.5,PORT={}]", PORT); log.info("* "); log.info("* ========================"); log.info("* "); System.out.println("* ========================"); System.out.println("* "); System.out.println("* [QUANTITY-FZZY-SERVER:FZZY_TCP_QUANTITY_V3.5,PORT={}]" + port); System.out.println("* "); System.out.println("* ========================"); } public IoSessionQuery getSessionQuery() { return sessionQuery; } /** * 发送信息 * * @param ip * @param port * @param msg * @return */ public InvokeResult push(String ip, int port, byte[] msg) { IoSessionQuery sessionFactory = getSessionQuery(); List sessions = sessionFactory.getAllSession(); IoSession session = null; for (IoSession ioSession : sessions) { if (ServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) { session = ioSession; break; } } if (null == session) { return InvokeResult.CHANNEL_CLOSED; } return session.invoke(msg); } /** * 主动销毁当前连接 * * @param ip * @param port * @return */ public InvokeResult destroy(String ip, int port) { IoSessionQuery sessionFactory = getSessionQuery(); List sessions = sessionFactory.getAllSession(); IoSession session = null; for (IoSession ioSession : sessions) { if (ServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) { session = ioSession; break; } } if (null == session) { return InvokeResult.SUCCESS; } // 执行连接销毁 session.destroy(); return InvokeResult.SUCCESS; } }