miduo_server/serverlogic/src/main/java/com/ljsd/GameApplication.java

174 lines
7.4 KiB
Java
Raw Normal View History

2019-01-23 11:46:49 +08:00
package com.ljsd;
2018-12-27 17:54:23 +08:00
2019-07-11 10:02:18 +08:00
import com.ljsd.common.mogodb.util.MongoKeys;
2019-01-21 15:31:02 +08:00
import com.ljsd.jieling.config.ServerConfig;
2019-09-09 16:07:11 +08:00
import com.ljsd.jieling.config.json.CoreSettings;
2019-01-09 09:57:46 +08:00
import com.ljsd.jieling.config.json.ServerConfiguration;
import com.ljsd.jieling.config.json.ServerProperties;
2019-03-06 15:07:12 +08:00
import com.ljsd.jieling.db.mongo.MongoUtil;
2019-01-08 18:46:36 +08:00
import com.ljsd.jieling.db.redis.RedisUtil;
2018-12-27 17:54:23 +08:00
import com.ljsd.jieling.handler.BaseHandler;
2019-02-25 17:35:38 +08:00
import com.ljsd.jieling.handler.map.MapLogic;
2019-05-13 16:10:03 +08:00
import com.ljsd.jieling.logic.GlobalDataManaager;
2019-01-04 13:39:02 +08:00
import com.ljsd.jieling.logic.STableManager;
2019-04-22 19:25:03 +08:00
import com.ljsd.jieling.logic.activity.ActivityLogic;
2019-01-24 14:35:59 +08:00
import com.ljsd.jieling.logic.dao.MailingSystemManager;
2019-03-12 17:01:40 +08:00
import com.ljsd.jieling.logic.fight.CheckFight;
2019-05-10 17:44:44 +08:00
import com.ljsd.jieling.logic.hero.HeroLogic;
2018-12-27 17:54:23 +08:00
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;
2019-01-08 18:46:36 +08:00
import com.ljsd.jieling.thread.ThreadManager;
2019-07-11 10:02:18 +08:00
import com.ljsd.jieling.thread.task.MongoDataHandlerTask;
import com.ljsd.jieling.thrift.pool.ThriftPoolUtils;
2019-01-22 14:44:02 +08:00
import com.ljsd.jieling.util.KeyGenUtils;
2019-04-25 14:55:06 +08:00
import com.ljsd.jieling.util.SensitivewordFilter;
2019-01-21 15:31:02 +08:00
import com.ljsd.jieling.util.TimeUtils;
2019-07-04 11:33:18 +08:00
import com.ljsd.jieling.util.http.HttpPool;
2018-12-27 17:54:23 +08:00
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;
2019-01-21 15:31:02 +08:00
import java.text.SimpleDateFormat;
import java.util.Date;
2018-12-27 17:54:23 +08:00
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);
2019-01-09 09:57:46 +08:00
public static ServerProperties serverProperties;
2018-12-27 17:54:23 +08:00
private static NettyGameServer nettyServer = null;
public static int serverId = 0;
2019-04-28 17:26:43 +08:00
public static int areaId = 0;
2018-12-27 17:54:23 +08:00
public static boolean start = false;
2019-01-21 15:31:02 +08:00
public static ServerConfig serverConfig;
2019-01-04 13:39:02 +08:00
public static void main(String[] args) throws Exception {
2018-12-27 17:54:23 +08:00
start = true;
app = new SpringApplication(GameApplication.class);
app.setRegisterShutdownHook(false);
app.setWebEnvironment(false);
configurableApplicationContext = app.run(args);
2019-01-09 09:57:46 +08:00
ServerConfiguration serverConfiguration = configurableApplicationContext.getBean(ServerConfiguration.class);
serverProperties = serverConfiguration.getServerProperties();
2019-01-09 13:58:05 +08:00
serverId = serverProperties.getId();
2019-09-09 16:07:11 +08:00
CoreSettings coreSettings = configurableApplicationContext.getBean(CoreSettings.class);
GameApplication.areaId = coreSettings.getArea();
2019-01-09 17:52:01 +08:00
LOGGER.info("ServerProperties ->{},coreIp=>{}", serverProperties.toString());
2019-08-21 18:42:06 +08:00
RedisUtil.getInstence().init(configurableApplicationContext);
MongoUtil.getInstence().init(configurableApplicationContext);
2018-12-27 17:54:23 +08:00
//注册消息处理方法
ProtocolsManager protocolsManager = ProtocolsManager.getInstance();
2019-08-21 18:42:06 +08:00
protocolsManager.initCheck();
2018-12-27 17:54:23 +08:00
// protocolsManager.initContext();
// 追加ProtocolsManager消息处理器
Map<String, BaseHandler> gameHanderMap = configurableApplicationContext.getBeansOfType(BaseHandler.class);
for (BaseHandler handler : gameHanderMap.values()) {
protocolsManager.addHandler(handler);
}
2019-01-08 18:46:36 +08:00
2019-07-04 11:33:18 +08:00
//http线程池初始化
2019-07-04 17:46:59 +08:00
// HttpPool.init();
2019-09-10 10:05:03 +08:00
//todo 设置开服时间
setRegisterTime();
2019-01-21 10:50:59 +08:00
STableManager.initialize("com.ljsd.jieling.config");
2019-07-11 10:02:18 +08:00
//mongo异步数据处理线程
MongoDataHandlerTask.init(configurableApplicationContext);
2019-04-02 14:26:20 +08:00
//初始化邮件
MailingSystemManager.init(configurableApplicationContext);
2019-06-26 14:49:47 +08:00
ThreadManager threadManager = ThreadManager.getInstance();
2019-01-08 18:46:36 +08:00
threadManager.init(configurableApplicationContext);
2019-02-25 17:35:38 +08:00
MapLogic.getInstance().init(configurableApplicationContext);
2019-07-11 10:02:18 +08:00
MongoKeys.initmongoKey();
2019-04-25 14:55:06 +08:00
SensitivewordFilter.init();
2019-07-11 10:02:18 +08:00
HttpPool.init();
2019-04-25 14:55:06 +08:00
2019-03-12 17:01:40 +08:00
// 加载lua文件
2019-03-21 15:29:22 +08:00
CheckFight.getInstance().init("luafight/BattleMain.lua");
2019-03-12 17:01:40 +08:00
2018-12-27 17:54:23 +08:00
final NettyServerAutoConfiguration netServerConfig = configurableApplicationContext.getBean(NettyServerAutoConfiguration.class);
NettyProperties properties = netServerConfig.getNettyProperties();
2019-09-10 10:05:03 +08:00
2019-01-22 14:44:02 +08:00
KeyGenUtils.setMachineNum(serverConfiguration.getServerProperties().getNum());
2019-04-22 19:25:03 +08:00
ActivityLogic.getInstance().checkActiviyStatus();
ThriftPoolUtils.getInstance().initContext(configurableApplicationContext);
2019-07-12 15:14:11 +08:00
GlobalDataManaager.getInstance().whenServerStart(configurableApplicationContext);
2019-05-10 17:44:44 +08:00
HeroLogic.getInstance().afterSet();
2019-06-11 20:56:31 +08:00
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
Thread.currentThread().setName("addShutdownHook");
close();
}
});
2018-12-27 17:54:23 +08:00
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);
}
}
2019-09-10 10:05:03 +08:00
private static void setRegisterTime() throws Exception {
ServerConfig serverConfigTmp = MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class);
if( null == serverConfigTmp ){
serverConfigTmp = new ServerConfig();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long serverOenTime = TimeUtils.getAppointTime(0);
String format = simpleDateFormat.format(serverOenTime);
serverConfigTmp.setOpenTime(format);
serverConfigTmp.setCacheOpenTime(serverOenTime);
serverConfigTmp.setId(1);
serverConfigTmp.setWorldLevel(1);
MongoUtil.getInstence().getMyMongoTemplate().saveWithoutMongoRoot(serverConfigTmp);
}else{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String openTime = serverConfigTmp.getOpenTime();
Date date = simpleDateFormat.parse(openTime);
serverConfigTmp.setCacheOpenTime(date.getTime());
}
serverConfig = serverConfigTmp;
}
2018-12-27 17:54:23 +08:00
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-------------------");
}
}