177 lines
7.5 KiB
Java
177 lines
7.5 KiB
Java
package com.ljsd;
|
|
|
|
import com.ljsd.common.mogodb.util.MongoKeys;
|
|
import com.ljsd.jieling.config.ServerConfig;
|
|
import com.ljsd.jieling.config.json.CoreSettings;
|
|
import com.ljsd.jieling.config.json.ServerConfiguration;
|
|
import com.ljsd.jieling.config.json.ServerProperties;
|
|
import com.ljsd.jieling.db.mongo.MongoUtil;
|
|
import com.ljsd.jieling.db.redis.RedisUtil;
|
|
import com.ljsd.jieling.handler.BaseHandler;
|
|
import com.ljsd.jieling.handler.map.MapLogic;
|
|
import com.ljsd.jieling.logic.GlobalDataManaager;
|
|
import com.ljsd.jieling.logic.STableManager;
|
|
import com.ljsd.jieling.logic.activity.ActivityLogic;
|
|
import com.ljsd.jieling.logic.dao.GuilidManager;
|
|
import com.ljsd.jieling.logic.dao.MailingSystemManager;
|
|
import com.ljsd.jieling.logic.fight.CheckFight;
|
|
import com.ljsd.jieling.logic.hero.HeroLogic;
|
|
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 com.ljsd.jieling.thread.task.MongoDataHandlerTask;
|
|
import com.ljsd.jieling.thrift.pool.ThriftPoolUtils;
|
|
import com.ljsd.jieling.util.KeyGenUtils;
|
|
import com.ljsd.jieling.util.SensitivewordFilter;
|
|
import com.ljsd.jieling.util.TimeUtils;
|
|
import com.ljsd.jieling.util.http.HttpPool;
|
|
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.text.SimpleDateFormat;
|
|
import java.util.Date;
|
|
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 int areaId = 0;
|
|
public static boolean start = false;
|
|
|
|
public static ServerConfig serverConfig;
|
|
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();
|
|
CoreSettings coreSettings = configurableApplicationContext.getBean(CoreSettings.class);
|
|
GameApplication.areaId = coreSettings.getArea();
|
|
LOGGER.info("ServerProperties ->{},coreIp=>{}", serverProperties.toString());
|
|
RedisUtil.getInstence().init(configurableApplicationContext);
|
|
MongoUtil.getInstence().init(configurableApplicationContext);
|
|
//注册消息处理方法
|
|
ProtocolsManager protocolsManager = ProtocolsManager.getInstance();
|
|
protocolsManager.initCheck();
|
|
// protocolsManager.initContext();
|
|
|
|
// 追加ProtocolsManager消息处理器
|
|
Map<String, BaseHandler> gameHanderMap = configurableApplicationContext.getBeansOfType(BaseHandler.class);
|
|
for (BaseHandler handler : gameHanderMap.values()) {
|
|
protocolsManager.addHandler(handler);
|
|
}
|
|
|
|
|
|
//http线程池初始化
|
|
// HttpPool.init();
|
|
//todo 设置开服时间
|
|
setRegisterTime();
|
|
GuilidManager.init();
|
|
|
|
STableManager.initialize("com.ljsd.jieling.config");
|
|
//mongo异步数据处理线程
|
|
MongoDataHandlerTask.init(configurableApplicationContext);
|
|
//初始化邮件
|
|
MailingSystemManager.init(configurableApplicationContext);
|
|
ThreadManager threadManager = ThreadManager.getInstance();
|
|
threadManager.init(configurableApplicationContext);
|
|
MapLogic.getInstance().init(configurableApplicationContext);
|
|
MongoKeys.initmongoKey();
|
|
SensitivewordFilter.init();
|
|
HttpPool.init();
|
|
|
|
// 加载lua文件
|
|
CheckFight.getInstance().init("luafight/BattleMain.lua");
|
|
|
|
final NettyServerAutoConfiguration netServerConfig = configurableApplicationContext.getBean(NettyServerAutoConfiguration.class);
|
|
NettyProperties properties = netServerConfig.getNettyProperties();
|
|
|
|
KeyGenUtils.setMachineNum(serverConfiguration.getServerProperties().getNum());
|
|
ActivityLogic.getInstance().checkActiviyStatus();
|
|
ThriftPoolUtils.getInstance().initContext(configurableApplicationContext);
|
|
GlobalDataManaager.getInstance().whenServerStart(configurableApplicationContext);
|
|
HeroLogic.getInstance().afterSet();
|
|
Runtime.getRuntime().addShutdownHook(new Thread() {
|
|
@Override
|
|
public void run() {
|
|
Thread.currentThread().setName("addShutdownHook");
|
|
close();
|
|
}
|
|
});
|
|
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 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;
|
|
}
|
|
|
|
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-------------------");
|
|
|
|
}
|
|
|
|
}
|