package com.metazion.jgd.logic; import java.util.concurrent.ConcurrentLinkedQueue; import com.metazion.jgd.action.LogicAction; import com.metazion.jgd.action.RequestAction; import com.metazion.jgd.info.ServerConfig; import com.metazion.jgd.info.ServerInfoManager; import com.metazion.jgd.util.DbUtil; import com.metazion.jgd.util.JgdLogger; import com.metazion.jm.task.TaskManager; import com.metazion.object.ServerManager; import com.metazion.object.UserManager;; public class LogicService { private volatile boolean stopDesired = false; // 优雅关闭 private ConcurrentLinkedQueue<RequestAction> requestActionQueue = new ConcurrentLinkedQueue<RequestAction>(); private ConcurrentLinkedQueue<LogicAction> logicActionQueue = new ConcurrentLinkedQueue<LogicAction>(); private TaskManager taskManager = new TaskManager(); private ServerManager serverManager = new ServerManager(); // 服务器组 private UserManager userManager = new UserManager(); // 用户 public boolean init() { JgdLogger.getLogger().fatal("Logic service init..."); boolean result = ServerConfig.getInstance().load(); if (!result) { return false; } result = ServerInfoManager.getInstance().load(); if (!result) { return false; } result = DbUtil.init(); if (!result) { return false; } return true; } public void start() { JgdLogger.getLogger().fatal("Logic service start..."); } public void stop() { JgdLogger.getLogger().fatal("Logic service stop..."); } public void tick(long interval) { processRequestAction(); processLogicAction(); taskManager.tick(interval); } public void shutdownGracefully() { JgdLogger.getLogger().fatal("Logic service shutdownGracefully..."); stopDesired = true; } public void pushRequestAction(RequestAction requestAction) { // 优雅关闭状态下,不再接受网络请求 if (stopDesired) { return; } requestActionQueue.add(requestAction); } public void pushLogicAction(LogicAction logicAction) { logicActionQueue.add(logicAction); } public TaskManager getTaskManager() { return taskManager; } public ServerManager getServerManager() { return serverManager; } public UserManager getUserManager() { return userManager; } private void processRequestAction() { while (!requestActionQueue.isEmpty()) { RequestAction requestAction = requestActionQueue.poll(); requestAction.execute(); } } private void processLogicAction() { while (!logicActionQueue.isEmpty()) { LogicAction logicAction = logicActionQueue.poll(); logicAction.execute(); } } }