// 分钟心跳
        public static void HeartbeatMinute()
        {
            //重置一下随机数
            Util.RandomReset();

            GameServerLinkManager.HeartbeatMinute();

            loger.Info($"服务器分钟更新");
        }
Beispiel #2
0
        /// <summary>
        /// 主程序
        /// </summary>
        /// <param name="args"></param>
        private static void Main(string[] args)
        {
            BaseProgram.PubMain1(args, EServerType.游戏);

            #region 启动服务器后执行服务器数据初始化

            OnServerStart();

            #endregion 启动服务器后执行服务器数据初始化


            #region  务器事件

            //新连接事件
            BaseServerInfo.AppServer.NewSessionConnected += new SessionHandler <LunarSession>(Dispatcher.OnSessionConnected);

            //连接断开事件
            BaseServerInfo.AppServer.SessionClosed += new SessionHandler <LunarSession, CloseReason>(Dispatcher.OnSessionClosed);

            //收到消息事件
            BaseServerInfo.AppServer.NewRequestReceived += new RequestHandler <LunarSession, LunarRequestInfo>(BaseDispatch.OnDispatch);

            #endregion  务器事件

            BaseProgram.PubMain2();

            BaseProgram.PubMain3();


            #region 连接到其他服务器

            if (!GameServerLinkManager.Start())
            {
                loger.Fatal("连接到其他服务器失败");
            }

            #endregion 连接到其他服务器

            #region 添加读取指令的线程

            BaseServerInfo.threadDriverCmds = new Thread(new ThreadStart(DriverCmds.ThreadDriverCmds));
            BaseServerInfo.threadDriverCmds.Start();
            Thread.Sleep(1000);

            #endregion 添加读取指令的线程

            #region 添加发送消息线程

            BaseServerInfo.threadSend = new Thread(new ThreadStart(BaseDispatch.ThreadSendMain));
            BaseServerInfo.threadSend.Start();
            Thread.Sleep(1000);

            BaseServerInfo.threadSend = new Thread(new ThreadStart(BaseDispatch.ThreadSendMergeMain));
            BaseServerInfo.threadSend.Start();
            Thread.Sleep(1000);

            #endregion

            BaseProgram.StartThreadDbMysqlSecond();

            #region 进入主循环


            while (true)
            {
                System.Threading.Thread.CurrentThread.Join(BaseServerInfo.ServerHeartbeat);
                try
                {
                    ServerHeartbeat.Heartbeat();
                }
                catch (Exception ex)
                {
                    loger.Fatal("服务器错误", ex);
                }
            }

            #endregion 进入主循环
        }
        // 10秒心跳
        public static void HeartbeatSecond10()
        {
            GameServerLinkManager.HeartbeatSecond10();

            HeartbeatManager.HeartbeatAllPlayerSecond10();
        }