package com.ld.igds.protocol.snap.server; import com.ld.igds.protocol.snap.SnapUtils; import com.ld.io.api.*; import com.ld.io.netty.NettyServer; import lombok.extern.slf4j.Slf4j; import java.util.List; /** * 配置主服务信息 */ @Slf4j public class SnapServerEngine { public static final int port = 9301; public static NettyServer ioServer = null; // 配置消息接收类 private static MsgConsumer messageConsume = new MsgConsumer(); // 监听会话的创建与销毁 private static SessionListener ioSessionListener = new SessionListener(); // 心跳提供 private static HeartbeatProvider heartbeatProvider = new HeartbeatProviderImpl(); public static void start() throws InterruptedException { // 配置Server的配置 IoServerOption ioServerOption = new IoServerOption(port); ioServerOption.setSplitDecoderType(SplitByteDecoderType.DELIMITER_SYMBOL); ioServerOption.setDelimiter(SnapUtils.MSG_END.getBytes()); // 配置心跳执行时间 ioServerOption.setReaderIdleTime(SnapUtils.HEART_BEAT_TIME); ioServer = new NettyServer(ioServerOption, messageConsume, ioSessionListener,heartbeatProvider); ioServer.startup(); log.info("* "); log.info("* ========================"); log.info("* "); log.info("* 远程抓拍插件服务启动,端口号={}", SnapServerEngine.port); log.info("* "); log.info("* ========================"); log.info("* "); System.out.println("* "); System.out.println("* ========================"); System.out.println("* "); System.out.println("* 远程抓拍插件服务启动,端口号=" + SnapServerEngine.port); System.out.println("* "); System.out.println("* ========================"); System.out.println("* "); } /** * @param key * @param msg * @return */ public static InvokeResult push(String key, byte[] msg) { IoSessionQuery sessionFactory = ioServer.getSessionQuery(); List sessions = sessionFactory.getAllSession(); IoSession session = null; for (IoSession ioSession : sessions) { if (key.equals(ioSession.getBusinessKey())) { session = ioSession; break; } } if (null == session) { return InvokeResult.CHANNEL_CLOSED; } return session.invoke(msg); } /** * @param ip * @param port * @param sn */ public static void updateKey(String ip, int port, String sn) { IoSessionQuery sessionFactory = ioServer.getSessionQuery(); List sessions = sessionFactory.getAllSession(); for (IoSession ioSession : sessions) { if (ioSession.getAddress().equals(ip) && ioSession.getPort() == port) { ioSession.setBusinessKey(sn); break; } } } }