generated from root/miduo_server
171 lines
7.1 KiB
Java
171 lines
7.1 KiB
Java
package com.ljsd;
|
|
|
|
import cn.thinkingdata.analytics.TDAnalytics;
|
|
import cn.thinkingdata.analytics.TDBatchConsumer;
|
|
import cn.thinkingdata.analytics.inter.ITDConsumer;
|
|
import com.ljsd.commonFunc.GsGuildInfoCacheLoader;
|
|
import com.ljsd.jieling.config.json.MongoConfiguration;
|
|
import com.ljsd.jieling.config.json.MongoProperties;
|
|
import com.ljsd.jieling.config.json.ServerConfiguration;
|
|
import com.ljsd.jieling.config.json.ServerProperties;
|
|
import com.ljsd.jieling.config.json.*;
|
|
import com.ljsd.jieling.db.mongo.MongoUtil;
|
|
import com.ljsd.jieling.db.redis.RedisKey;
|
|
import com.ljsd.jieling.db.redis.RedisUtil;
|
|
import com.ljsd.jieling.ktbeans.ReportUtil;
|
|
import com.ljsd.jieling.logic.dao.ServerConfig;
|
|
import com.ljsd.jieling.logic.dao.root.GlobalSystemControl;
|
|
import com.ljsd.jieling.logic.rankReward.RankRewardLogic;
|
|
import com.ljsd.jieling.network.NetManager;
|
|
import com.ljsd.jieling.util.ConfigurableApplicationContextManager;
|
|
import com.ljsd.worldmanager.WorldServerListListener;
|
|
import org.I0Itec.zkclient.ZkClient;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
|
import org.springframework.context.annotation.ComponentScan;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
|
import util.TimeUtils;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Date;
|
|
import java.util.Scanner;
|
|
|
|
|
|
@Configuration
|
|
@EnableAutoConfiguration
|
|
@ComponentScan
|
|
@EnableScheduling
|
|
public class GameApplication {
|
|
|
|
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(GameApplication.class);
|
|
public static ServerProperties serverProperties;
|
|
public static MongoProperties mongoProperties;
|
|
|
|
public static int serverId = 0;
|
|
public static boolean openTdAnalytics = false;
|
|
public static int areaId = 0;
|
|
public static boolean start = false;
|
|
public static ServerConfig serverConfig;
|
|
public static String serverName;
|
|
public static ZkClient zkClient;
|
|
public static TDAnalytics tdAnalytics;
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
//关闭会话钩子
|
|
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
|
System.out.println("jvm 进程退出");
|
|
zkClient.close();
|
|
}));
|
|
|
|
start = true;
|
|
ConfigurableApplicationContextManager.init(args);
|
|
|
|
//init servercfg
|
|
ServerConfiguration serverConfiguration = ConfigurableApplicationContextManager.getBean(ServerConfiguration.class);
|
|
MongoConfiguration mongoConfiguration = ConfigurableApplicationContextManager.getBean(MongoConfiguration.class);
|
|
|
|
|
|
serverProperties = serverConfiguration.getServerProperties();
|
|
mongoProperties = mongoConfiguration.getMongoProperties();
|
|
zkClient = new ZkClient(serverProperties.getZkAddr(),
|
|
serverProperties.getZkConnectTimeout());
|
|
serverId = serverProperties.getId();
|
|
openTdAnalytics = serverProperties.isOpenTdAnalytics();
|
|
ITDConsumer consumer = generateBatchConsumer(serverProperties.getTdUrl(), serverProperties.getTdAppId());
|
|
if (consumer != null) {
|
|
tdAnalytics = new TDAnalytics(consumer, false);
|
|
}
|
|
|
|
LOGGER.info("ServerProperties ->{},coreIp=>{}", serverProperties.toString());
|
|
MongoUtil.getInstence().init();
|
|
GlobalSystemControl.getGlobalSystemControl();
|
|
GameLogicService.getInstance().init();
|
|
serverName = MongoUtil.getInstence().getServerNameById(serverProperties.getId());
|
|
//设置开服时间
|
|
setRegisterTime();// might loop
|
|
GameLogicService.getInstance().onStart();
|
|
//每隔五分钟重载一次工会缓存
|
|
GsGuildInfoCacheLoader.loadGuildInfoCache();
|
|
//初始化榜单结算信息
|
|
RankRewardLogic.getInstance().init();
|
|
//监听世界服列表
|
|
new WorldServerListListener().start();
|
|
new ReportUtil().start();
|
|
NetManager.getInstance().init();
|
|
//控制台gm
|
|
Scanner sc = new Scanner(System.in);
|
|
while (sc.hasNext()) {
|
|
try {
|
|
String cmd = sc.nextLine();
|
|
if (cmd.startsWith("//")) {
|
|
System.out.println("gmgmgm:" + cmd.substring(2));
|
|
String cmd2 = cmd.substring(2);
|
|
GmService.exeCmd(cmd2);
|
|
}
|
|
} catch (Exception e) {
|
|
System.out.print("gmException" + e);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private static void setRegisterTime() throws Exception {
|
|
ServerConfig serverConfigTmp = MongoUtil.getInstence().getMyMongoTemplate().findById(1, ServerConfig.class);
|
|
if (null == serverConfigTmp) {
|
|
serverConfigTmp = new ServerConfig();
|
|
if (GameApplication.serverProperties.isAutoOpen()) {
|
|
int startbefore = 60; //开服白名单时间
|
|
long needtime = TimeUtils.DifferMintFromLast(RedisUtil.getInstence().getObject(GameApplication.serverId + RedisKey.Delimiter_colon + RedisKey.AUTOOPENTIME, "", String.class, -1));
|
|
while (needtime - startbefore > 0) {
|
|
long sleepTime = needtime - startbefore;
|
|
try {
|
|
LOGGER.error("预计" + sleepTime + "分钟后开服");
|
|
Thread.sleep(1000 * 60);
|
|
} catch (Exception e) {
|
|
LOGGER.error("休眠异常", e.getMessage(), e);
|
|
}
|
|
needtime = TimeUtils.DifferMintFromLast(RedisUtil.getInstence().getObject(GameApplication.serverId + RedisKey.Delimiter_colon + RedisKey.AUTOOPENTIME, "", String.class, -1));
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
public static void close() throws Exception {
|
|
start = false;
|
|
NetManager.getInstance().exit();
|
|
ConfigurableApplicationContextManager.getInstance().exit();
|
|
}
|
|
|
|
public static ITDConsumer generateBatchConsumer(String url, String appId) {
|
|
ITDConsumer consumer = null;
|
|
try {
|
|
TDBatchConsumer.Config config = new TDBatchConsumer.Config();
|
|
config.setBatchSize(1);
|
|
config.setMaxCacheSize(1);
|
|
consumer = new TDBatchConsumer(url, appId, config);
|
|
} catch (Exception ignored) {
|
|
}
|
|
return consumer;
|
|
}
|
|
|
|
}
|