package com.ljsd; import com.ljsd.jieling.config.json.ServerConfiguration; import com.ljsd.jieling.config.json.ServerProperties; import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.handler.BaseHandler; import com.ljsd.jieling.logic.STableManager; import com.ljsd.jieling.netty.server.NettyGameServer; import com.ljsd.jieling.network.NettyProperties; import com.ljsd.jieling.network.NettyServerAutoConfiguration; import com.ljsd.jieling.network.server.ProtocolsManager; import com.ljsd.jieling.network.session.ISessionFactory; import com.ljsd.jieling.thread.ThreadManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import java.util.Map; @Configuration @EnableAutoConfiguration @ComponentScan @EnableScheduling public class GameApplication { private static SpringApplication app = null; private static ConfigurableApplicationContext configurableApplicationContext = null; private static final Logger LOGGER = LoggerFactory.getLogger(GameApplication.class); public static ServerProperties serverProperties; private static NettyGameServer nettyServer = null; public static int serverId = 0; // public static ServerProperties serverProperties; public static boolean start = false; public static void main(String[] args) throws Exception { start = true; app = new SpringApplication(GameApplication.class); app.setRegisterShutdownHook(false); app.setWebEnvironment(false); configurableApplicationContext = app.run(args); ServerConfiguration serverConfiguration = configurableApplicationContext.getBean(ServerConfiguration.class); serverProperties = serverConfiguration.getServerProperties(); serverId = serverProperties.getId(); //注册消息处理方法 ProtocolsManager protocolsManager = ProtocolsManager.getInstance(); // protocolsManager.initContext(); // 追加ProtocolsManager消息处理器 Map gameHanderMap = configurableApplicationContext.getBeansOfType(BaseHandler.class); for (BaseHandler handler : gameHanderMap.values()) { protocolsManager.addHandler(handler); } RedisUtil.getInstence().init(configurableApplicationContext); STableManager.initialize("com.ljsd.jieling.config"); ThreadManager threadManager = new ThreadManager(); threadManager.init(configurableApplicationContext); final NettyServerAutoConfiguration netServerConfig = configurableApplicationContext.getBean(NettyServerAutoConfiguration.class); NettyProperties properties = netServerConfig.getNettyProperties(); try { LOGGER.info("main->CoreApplication start..."); ISessionFactory sessionFactory = new ISessionFactory(); nettyServer = new NettyGameServer(properties.getTcpPort(), properties.getReadTimeout(), properties.getWriteTimeout(), properties.getAllTimeout(),ProtocolsManager.getInstance(), sessionFactory); nettyServer.start(); } catch (Exception e) { LOGGER.error("main->msg={}", e.getMessage(), e); } } private static void close() { start = false; LOGGER.info("close->QuartzManager.getInstance().shutdownJob-------------------"); try { nettyServer.stop(); } catch (Exception e) { LOGGER.error("close->msg={}", e.getMessage(), e); } LOGGER.info("close->nettyServer.stop-------------------"); configurableApplicationContext.close(); LOGGER.info("-------------------configurableApplicationContext.close-------------------"); } }