Exemple #1
0
        public void SendRoleData(string _Acc)
        {
            GetRolesList szGetRolesList = new GetRolesList();

            szGetRolesList.Acc    = _Acc;
            szGetRolesList.ZoneID = 0;

            MemoryStream msResult = new MemoryStream();

            Serializer.Serialize <GetRolesList>(msResult, szGetRolesList);
            byte[]       msSendData     = msResult.ToArray();
            TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_GSNetClient.OutPacketPool, msSendData, 0, msSendData.Length, (int)CommandID.CMD_GET_ROLE_LIST);

            if (m_GSNetClient.SendData(szTCPOutPacket))
            {
                SysConOut.WriteLine("发送获取角色列表数据成功");
            }
            else
            {
                SysConOut.WriteLine("发送获取角色列表数据失败");
            }

            //TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_tcpOutPacketPool,
            //    StringUtil.substitute("{0}:{1}", _Acc, "0"),
            //    (int)TCPServerCmds.CMD_ROLE_LIST);
            //if (m_GSNetClient.SendData(szTCPOutPacket))
            //    SysConOut.WriteLine("发送获取角色列表数据成功");
            //else
            //    SysConOut.WriteLine("发送获取角色列表数据失败");
            m_GSNetClient.OutPacketPool.Push(szTCPOutPacket);
        }
Exemple #2
0
        public TCPProcessCmdResults AttchFun(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey,
                                             TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            TCPProcessCmdResults result = TCPProcessCmdResults.RESULT_FAILED;

            tcpOutPacket = null;
            try
            {
                if (m_FunInsinuate.ContainsKey(nID))
                {
                    result = m_FunInsinuate[nID](tcpMgr, socket, tcpClientPool, tcpRandKey, pool, nID, data, count, out tcpOutPacket);
                }
                else
                {
                    SysConOut.WriteLine("收到APP数据,但没找到隐射函数");
                }
                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (null != client)
                {
                    client.ClientData.LastClientHeartTicks = TimeUtil.NOW();
                }
            }
            catch (Exception ex)
            {
                SysConOut.WriteLine("AttchFun****************" + ex.ToString());
            }

            return(result);
        }
Exemple #3
0
        public void SendPlayGame(string _RoleID)
        {
            PlayGame szPlayGame = new PlayGame();

            szPlayGame.RoleID = Convert.ToInt32(_RoleID);

            MemoryStream msResult = new MemoryStream();

            Serializer.Serialize <PlayGame>(msResult, szPlayGame);
            byte[]       msSendData     = msResult.ToArray();
            TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_GSNetClient.OutPacketPool, msSendData, 0, msSendData.Length, (int)CommandID.CMD_PLAY_GAME);

            if (m_GSNetClient.SendData(szTCPOutPacket))
            {
                SysConOut.WriteLine("发送进入游戏成功");
            }
            else
            {
                SysConOut.WriteLine("发送进入游戏失败");
            }
            //TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_tcpOutPacketPool, StringUtil.substitute("{0}", _RoleID),
            //    (int)TCPServerCmds.CMD_PLAY_GAME);
            //if (m_GSNetClient.SendData(szTCPOutPacket))
            //    SysConOut.WriteLine("发送进入游戏成功");
            //else
            //    SysConOut.WriteLine("发送进入游戏失败");
            m_GSNetClient.OutPacketPool.Push(szTCPOutPacket);
        }
Exemple #4
0
        //public static bool SendNetObject<T>(this T obj, CommandID cmd)
        //where T : global::ProtoBuf.IExtensible
        //{
        //    int cmdID = (int)cmd;
        //    try
        //    {
        //        using (MemoryStream ms = new MemoryStream())
        //        {
        //            Serializer.Serialize<T>(ms, obj);
        //            byte[] datas = ms.ToArray();//序列化结果

        //            TCPOutPacket packet = TCPOutPacket.MakeTCPOutPacket(
        //                Sender.tcpOutPacketPool,
        //                datas, 0, datas.Length,
        //                cmdID
        //                );
        //            return Sender.SendData(packet);


        //        }
        //    }
        //    catch (Exception e)
        //    {
        //        Debug.LogError(e.Message);
        //        return false;
        //    }

        //}
        public void SendInitGame(string _Acc, string _RoleID)
        {
            InitialGame szInitialGame = new InitialGame();

            szInitialGame.Acc    = _Acc;
            szInitialGame.RoleID = Convert.ToInt32(_RoleID);

            MemoryStream msResult = new MemoryStream();

            Serializer.Serialize <InitialGame>(msResult, szInitialGame);
            byte[]       msSendData     = msResult.ToArray();
            TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_GSNetClient.OutPacketPool, msSendData, 0, msSendData.Length, (int)CommandID.CMD_INIT_GAME);

            if (m_GSNetClient.SendData(szTCPOutPacket))
            {
                SysConOut.WriteLine("发送初始化游戏成功");
            }
            else
            {
                SysConOut.WriteLine("发送初始化游戏失败");
            }
            //TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_tcpOutPacketPool,
            //    StringUtil.substitute("{0}:{1}:{2}", _Acc, _RoleID, "0"), (int)TCPServerCmds.CMD_INIT_GAME);
            //if (m_GSNetClient.SendData(szTCPOutPacket))
            //    SysConOut.WriteLine("发送初始化游戏成功");
            //else
            //{
            //    SysConOut.WriteLine("发送初始化游戏失败 连接状态 = " + m_GSNetClient.Connected.ToString());
            //}
            m_GSNetClient.OutPacketPool.Push(szTCPOutPacket);
        }
        public static void LoadConfig()
        {
            string fileName         = "Config/GameFuncControl.xml";
            string fullPathFileName = Global.GameResPath(fileName);

            XElement xml = null;

            try
            {
                xml = XElement.Load(fullPathFileName);
            }
            catch (Exception)
            {
                return;
            }

            XElement args = xml.Element("GameFunc");

            if (null != args)
            {
                IEnumerable <XElement> xmlItems = args.Elements();
                foreach (var xmlItem in xmlItems)
                {
                    int Effective = (int)Global.GetSafeAttributeLong(xmlItem, "Effective");

                    if (0 == Effective)
                    {
                        int TypeID = (int)Global.GetSafeAttributeLong(xmlItem, "TypeID");
                        GameFuncTypeList.Add(TypeID);
                        string Description = Global.GetSafeAttributeStr(xmlItem, "Description");
                        SysConOut.WriteLine(string.Format("{0}所有功能已屏蔽", Description));
                    }
                }
            }
        }
Exemple #6
0
        /// <summary>
        /// 在多个线程内部循环调用
        /// </summary>
        public void ProcessCmdPackets(Queue <CmdPacket> ls)
        {
            //dictInPackets.Values值的个数可能会变化,每次处理先保存好最大个数
            //同时给出20个冗余数量
            int maxCount = dictInPackets.Values.Count + 20;

            for (int n = 0; n < maxCount; n++)
            {
                TCPInPacket tcpInPacket = GetNextTcpInPacket(n);

                //这意味着列表数据包变少了
                if (null == tcpInPacket)
                {
                    break;
                }

                ls.Clear();

                if (tcpInPacket.PopCmdPackets(ls)) //判断是否取到了指令列表
                {
                    try
                    {
                        while (ls.Count > 0)
                        {
                            CmdPacket cmdPacket = ls.Dequeue();
                            //接收到了完整的命令包
                            TCPOutPacket         tcpOutPacket = null;
                            TCPProcessCmdResults result       = TCPProcessCmdResults.RESULT_FAILED;

                            result = TCPCmdHandler.ProcessCmd(this, tcpInPacket.CurrentSocket, tcpClientPool, tcpRandKey, tcpOutPacketPool, cmdPacket.CmdID, cmdPacket.Data, cmdPacket.Data.Length, out tcpOutPacket);

                            if (result == TCPProcessCmdResults.RESULT_DATA && null != tcpOutPacket)
                            {
                                //向登陆客户端返回数据
                                socketListener.SendData(tcpInPacket.CurrentSocket, tcpOutPacket);
                            }
                            else if (result == TCPProcessCmdResults.RESULT_FAILED)//解析失败, 直接关闭连接
                            {
                                if (cmdPacket.CmdID != (int)TCPGameServerCmds.CMD_LOG_OUT)
                                {
                                    LogManager.WriteLog(LogTypes.Error, string.Format("解析并执行命令失败: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket)));
                                }
                                SysConOut.WriteLine("========================ProcessCmdPackets CloseSocket================");
                                // Console.WriteLine("========================ProcessCmdPackets CloseSocket================");
                                //这儿需要关闭链接--->这样关闭对吗?
                                socketListener.CloseSocket(tcpInPacket.CurrentSocket);

                                break;
                            }
                        }
                    }
                    finally
                    {
                        //处理结束之后设置相关标志位
                        tcpInPacket.OnThreadDealingComplete();
                    }
                }
            }
        }
Exemple #7
0
        private static void OnTimedEvent(object source)
        {
            ScheduleTask task = source as ScheduleTask;

            if (task is MonsterTask)
            {
                MonsterTask monsterTask = task as MonsterTask;
                if (monsterTask.mapCode == 1)
                {
                    long ticks1 = TimeUtil.NOW();
                    SysConOut.WriteLine("----------------------------------时间触发器时间间隔----------------------------" + (ticks1 - ScheduleExecutor2.Instance.Oldticks).ToString());
                    ScheduleExecutor2.Instance.Oldticks = ticks1;
                }
            }
            if (task.InternalLock.TryEnter())
            {
                bool logRunTime = false;
                long nowTicks   = TimeUtil.CurrentTicksInexact;
                try
                {
                    task.run();
                }
                catch (System.Exception ex)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("{0}执行时异常,{1}", task.ToString(), ex.ToString()));
                }
                finally
                {
                    logRunTime = task.InternalLock.Leave();
                }

                if (logRunTime)
                {
                    long finishTicks = TimeUtil.CurrentTicksInexact;
                    if (finishTicks - nowTicks > TimeUtil.SECOND)
                    {
                        try
                        {
                            MonsterTask monsterTask = task as MonsterTask;
                            if (null != monsterTask)
                            {
                                LogManager.WriteLog(LogTypes.Error, string.Format("{0} mapCode:{1},subMapCode:{2},执行时间:{3}毫秒"
                                                                                  , task.ToString(), monsterTask.mapCode, monsterTask.subMapCode, finishTicks - nowTicks));
                            }
                            else
                            {
                                LogManager.WriteLog(LogTypes.Error, string.Format("{0}执行时间:{1}毫秒", task.ToString(), finishTicks - nowTicks));
                            }
                        }
                        catch
                        {
                            //写日志异常就不记了
                        }
                    }
                }
            }
        }
Exemple #8
0
        public void work()
        {
            lock (Worker._lock)
            {
                Worker.nThreadCount++;
                this.nThreadOrder = Worker.nThreadCount;
            }
            TaskWrapper taskWrapper   = null;
            int         lastTickCount = int.MinValue;

            while (!Program.NeedExitServer)
            {
                int tickCount = Environment.TickCount;
                if (tickCount <= lastTickCount + 5)
                {
                    if (lastTickCount <= 0 || tickCount >= 0)
                    {
                        Thread.Sleep(5);
                        continue;
                    }
                }
                lastTickCount = tickCount;
                long ticks = TimeUtil.NOW();
                for (;;)
                {
                    try
                    {
                        taskWrapper = this.getCanExecuteTask(ticks);
                        if (taskWrapper == null || null == taskWrapper.CurrentTask)
                        {
                            break;
                        }
                        if (taskWrapper.canExecute)
                        {
                            try
                            {
                                taskWrapper.CurrentTask.run();
                            }
                            catch (Exception ex)
                            {
                                DataHelper.WriteFormatExceptionLog(ex, "异步调度任务执行异常", false, false);
                            }
                        }
                        if (taskWrapper.Periodic > 0L && taskWrapper.canExecute)
                        {
                            taskWrapper.resetStartTime();
                            this.executor.addTask(taskWrapper);
                            taskWrapper.addExecuteCount();
                        }
                    }
                    catch (Exception)
                    {
                    }
                }
            }
            SysConOut.WriteLine(string.Format("ScheduleTask Worker{0}退出...", this.nThreadOrder));
        }
Exemple #9
0
        /// <summary>
        /// 接收数据通知函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private bool SocketReceived(object sender, SocketAsyncEventArgs e)
        {
            try
            {
                SocketListener sl          = sender as SocketListener;
                TCPInPacket    tcpInPacket = null;
                AsyncUserToken userToken   = (e.UserToken as AsyncUserToken);
                TMSKSocket     s           = userToken.CurrentSocket;
                if (GameManager.FlagOptimizeLock)
                {
                    tcpInPacket = s._TcpInPacket;
                    if (null == tcpInPacket)
                    {
                        lock (dictInPackets) //锁定接收包队列
                        {
                            if (!dictInPackets.TryGetValue(s, out tcpInPacket))
                            {
                                tcpInPacket      = tcpInPacketPool.Pop(s, TCPCmdPacketEvent);
                                dictInPackets[s] = tcpInPacket;
                            }
                        }
                        s._TcpInPacket = tcpInPacket;
                    }
                }
                else
                {
                    lock (dictInPackets) //锁定接收包队列
                    {
                        if (!dictInPackets.TryGetValue(s, out tcpInPacket))
                        {
                            tcpInPacket      = tcpInPacketPool.Pop(s, TCPCmdPacketEvent);
                            dictInPackets[s] = tcpInPacket;
                        }
                    }
                }
                //处理收到的包
                if (!tcpInPacket.WriteData(e.Buffer, e.Offset, e.BytesTransferred))
                {
                    SysConOut.WriteLine(string.Format("接收到非法数据长度的tcp命令, 需要立即断开! {0} {1}", e.Offset, e.BytesTransferred));
                    //LogManager.WriteLog(LogTypes.Error, string.Format("接收到非法数据长度的tcp命令, 需要立即断开!"));
                    return(false);
                }
            }
            catch (Exception ex)
            {
                SysConOut.WriteLine("SocketReceived 异常-------------------" + ex.Message);
            }



            return(true);
        }
Exemple #10
0
        public void SendMovePosition()
        {
            try
            {
                long tickTime = DateTime.Now.Ticks;
                SpriteMovePosition szSpriteMovePosition = new SpriteMovePosition();
                szSpriteMovePosition.RoleID  = Convert.ToInt32(g_RoleID);
                szSpriteMovePosition.MapCode = 1001;
                szSpriteMovePosition.action  = 2;
                szSpriteMovePosition.ToMapX  = 22500;
                szSpriteMovePosition.ToMapY  = 24300;
                //szSpriteMove.Movec = moveData.moveCost;
                szSpriteMovePosition.ToDiection  = 2;
                szSpriteMovePosition.clientTicks = 1;

                MemoryStream msResult = new MemoryStream();
                Serializer.Serialize <SpriteMovePosition>(msResult, szSpriteMovePosition);
                byte[]       msSendData     = msResult.ToArray();
                TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_GSNetClient.OutPacketPool, msSendData, 0, msSendData.Length,
                                                                            (int)CommandID.CMD_POSITION_MOVE);

                if (!m_GSNetClient.SendData(szTCPOutPacket))
                {
                    SysConOut.WriteLine("发送移位置数据失败");
                    g_Thread.Abort();
                    g_Thread = null;
                }
                m_GSNetClient.OutPacketPool.Push(szTCPOutPacket);

                msResult.Dispose();

                //long tickTime = DateTime.Now.Ticks;
                //var szMove = new SpriteMoveData(Convert.ToInt32(g_RoleID), 1, 2, 2520, 4600, 2, 2840, 4840, tickTime, "1(1,35,60):(1,31,57)");

                //TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_tcpOutPacketPool, szMove.toBytes(), 0, szMove.toBytes().Length,
                //    (int)TCPServerCmds.CMD_SPR_MOVE);
                //if (!m_GSNetClient.SendData(szTCPOutPacket))
                //{
                //    SysConOut.WriteLine("发送移动数据失败");
                //    g_Thread.Abort();
                //    g_Thread = null;

                //}
                //m_tcpOutPacketPool.Push(szTCPOutPacket);
            }
            catch (Exception ex)
            {
                SysConOut.WriteLine(ex.Message);
            }
        }
Exemple #11
0
        public void SendLoginData()
        {
            TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_GSNetClient.OutPacketPool,
                                                                        StringUtil.substitute("{0}:{1}:{2}:{3}:{4}:{5}", "20191113", g_Acc, g_psw, 1, 1, 1),
                                                                        (int)TCPServerCmds.CMD_LOGIN_ON1);

            if (m_LNetClient.SendData(szTCPOutPacket))
            {
                SysConOut.WriteLine("发送登陆数据成功");
            }
            else
            {
                SysConOut.WriteLine("发送登陆数据失败");
            }
            m_GSNetClient.OutPacketPool.Push(szTCPOutPacket);
        }
        public void print()
        {
            string str = string.Format("接收统计,接收失败={1},成功={2}, Time={5},平均={6}", new object[]
            {
                0,
                this.receiveErrNum,
                this.receiveSuNum,
                0,
                0,
                (this.endTime - this.startTime).TotalMilliseconds,
                Math.Truncate(100.0 * (this.endTime - this.startTime).TotalMilliseconds / (double)(this.receiveErrNum + this.receiveSuNum)) / 100.0
            });

            Console.ForegroundColor = ConsoleColor.Red;
            SysConOut.WriteLine(str);
            Console.ForegroundColor = ConsoleColor.White;
        }
 public static void stop(string cmd = null)
 {
     try
     {
         foreach (ThreadTimerModel item in S2KFCommunication.objList)
         {
             item.Stop();
         }
         TestReceiveModel.getInstance().stop();
         while (!TcpCall.TestS2KFCommunication.SendData(1, false).IsReturn)
         {
         }
         S2KFCommunication.stage = false;
         Console.WriteLine("压测关闭");
         double time       = 0.0;
         int    receiveNum = 0;
         int    sendSuNum  = 0;
         int    sendErrNum = 0;
         foreach (ThreadTimerModel item in S2KFCommunication.objList)
         {
             item.print();
             sendSuNum  += item.sendSuNum;
             sendErrNum += item.sendErrNum;
             time       += (item.endTime - item.startTime).TotalMilliseconds;
         }
         string str = string.Format("统计,发送失败={1},发送成功={2}, Time={4},平均={5}", new object[]
         {
             0,
             sendErrNum,
             sendSuNum,
             receiveNum,
             time / (double)S2KFCommunication.objList.Count,
             time / (double)S2KFCommunication.objList.Count / (double)(sendSuNum + sendErrNum)
         });
         Console.ForegroundColor = ConsoleColor.Red;
         SysConOut.WriteLine(str);
         Console.ForegroundColor = ConsoleColor.White;
         TestReceiveModel.getInstance().print();
     }
     catch (Exception ex)
     {
         LogManager.WriteException(ex.ToString());
         Console.WriteLine("关闭失败 Exception");
     }
 }
Exemple #14
0
        // 程序启动和Reload的时候调用
        public void LoadAllMonsterXml()
        {
            XElement tmpXml = null;

            try
            {
                string Url = Global.GameResPath("Config/Monsters.xml");
                SysConOut.WriteLine(Url);
                tmpXml = XElement.Load(Url);
            }
            catch (Exception ex)
            {
            }

            if (tmpXml != null)
            {
                this.AllMonstersXml = tmpXml;
            }
        }
Exemple #15
0
        /// <summary>
        /// 直线移动
        /// </summary>
        public bool _LinearMove(Monster sprite, Point p, int action)
        {
            long ticks1 = TimeUtil.NOW();

            //sprite.MoveToPos = p;
            sprite.DestPoint = p;
            bool ret = AStarMove(sprite, p, (int)action);

            long ticks2 = TimeUtil.NOW();

            ///超过100豪秒记录
            if (ticks2 > ticks1 + 100)
            {
                SysConOut.WriteLine(String.Format("_LinearMove 消耗:{0}毫秒, start({1}, {2}), to({3}, {4}), mapID={5}", ticks2 - ticks1, sprite.Coordinate.X, sprite.Coordinate.Y, p.X, p.Y, sprite.MonsterZoneNode.MapCode));
                LogManager.WriteLog(LogTypes.Error, String.Format("_LinearMove 消耗:{0}毫秒, start({1}, {2}), to({3}, {4}), mapID={5}", ticks2 - ticks1, sprite.Coordinate.X, sprite.Coordinate.Y, p.X, p.Y, sprite.MonsterZoneNode.MapCode));
            }

            return(ret);
        }
Exemple #16
0
 public static void LoadCallPetSystem()
 {
     lock (CallPetManager._CallPetMutex)
     {
         CallPetManager.CallPetPriceDict.Clear();
         string[] strPrice = GameManager.systemParamsList.GetParamValueByName("CallPet").Split(new char[]
         {
             ','
         });
         if (strPrice == null || strPrice.Length != 2)
         {
             SysConOut.WriteLine("        加载SystemParams.xml时出错!!!CallPet不存在");
         }
         else
         {
             CallPetManager.CallPetPriceDict[1]  = Convert.ToInt32(strPrice[0]);
             CallPetManager.CallPetPriceDict[10] = Convert.ToInt32(strPrice[1]);
             double nHour = GameManager.systemParamsList.GetParamValueDoubleByName("FreeCallPet", 0.0);
             if (nHour <= 0.0)
             {
                 SysConOut.WriteLine("        加载SystemParams.xml时出错!!!FreeCallPet不存在");
             }
             else
             {
                 CallPetManager.CallPetFreeHour = nHour;
                 double nTemp = GameManager.systemParamsList.GetParamValueDoubleByName("ConsumeCallPetJiFen", 0.0);
                 if (nTemp < 0.0)
                 {
                     SysConOut.WriteLine("        加载SystemParams.xml时出错!!!ConsumeCallPetJiFen小于0");
                 }
                 else
                 {
                     CallPetManager.ConsumeCallPetJiFen = nTemp;
                     nTemp = GameManager.systemParamsList.GetParamValueDoubleByName("ZhaoHuan", 0.0);
                     if (nTemp < 0.0)
                     {
                     }
                     CallPetManager.CallPetGoodsID = (int)nTemp;
                 }
             }
         }
     }
 }
Exemple #17
0
        /// <summary>
        /// 周期性任务
        /// </summary>
        /// <param name="task">任务</param>
        /// <param name="delay">延迟开始时间(毫秒)</param>
        /// <param name="periodic">间隔周期时间(毫秒)</param>
        /// <returns></returns>
        public void scheduleExecute(ScheduleTask task, int delay, int periodic)
        {
            if (periodic < 15 || periodic > 86400 * 1000)
            {
                throw new Exception("不正确的调度时间间隔periodic = " + periodic);
            }

            if (delay <= 0)
            {
                delay = periodic;
            }
            lock (this)
            {
                Timer timer;
                if (!TimerDict.TryGetValue(task, out timer))
                {
                    int szDuetime = Global.GetRandomNumber(delay / 2, delay * 3 / 2);
                    timer = new Timer(OnTimedEvent, task, szDuetime, periodic);
                    TimerDict.Add(task, timer);
                    if (task is MonsterTask)
                    {
                        MonsterTask monsterTask = task as MonsterTask;
                        if (monsterTask.mapCode == 1)
                        {
                            SysConOut.WriteLine(string.Format("Duetime = {0} periodic = {1}", szDuetime, periodic));
                        }
                    }
                }
                else
                {
                    timer.Change(periodic, periodic);
                    if (task is MonsterTask)
                    {
                        MonsterTask monsterTask = task as MonsterTask;
                        if (monsterTask.mapCode == 1)
                        {
                            SysConOut.WriteLine(string.Format("periodic = {0} periodic = {1}", periodic, periodic));
                        }
                    }
                }
            }
        }
Exemple #18
0
        public bool ConnectSer(string _LoginIP = "127.0.0.1", string _GameIP = "127.0.0.1", int _LPort = 4402, int _GSPort = 9929, int _key = 0)
        {
            if (!m_LNetClient.Connect(_LoginIP, _LPort))
            {
                return(false);
            }
            SysConOut.WriteLine("连接登陆服务器成功 IP=" + _LoginIP + "   Port = " + _LPort.ToString());

            if (m_GSNetClient != null && !m_GSNetClient.Connect(_GameIP, _GSPort))
            {
                m_ReConnectCount = 0;
                m_LNetClient.Destroy();
                return(false);
            }

            SysConOut.WriteLine("连接游戏服务器成功 IP=" + _GameIP + "   Port = " + _GSPort.ToString());

            m_Key = _key;
            return(true);
        }
Exemple #19
0
        public bool ProcessServerCmdHandler(TCPClient client, int nID, byte[] data, int count)
        {
            try
            {
                mutex.WaitOne();


                TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_tcpOutPacketPool, data,
                                                                            0, count, nID);

                m_MoveDataList.Enqueue(szTCPOutPacket);

                mutex.Release();
            }
            catch (Exception ex)
            {
                SysConOut.WriteLine(ex.Message);
            }

            return(true);
        }
 public bool KFCallMsgFunc(KFCallMsg msg)
 {
     try
     {
         int kuaFuEventType = msg.KuaFuEventType;
         if (kuaFuEventType == 10041)
         {
             if (!this.flag)
             {
                 this.receiveStopNum++;
                 TcpCall.TestS2KFCommunication.SendData(1, false);
                 if (this.receiveStopNum % 100 == 0)
                 {
                     Console.ForegroundColor = ConsoleColor.Red;
                     SysConOut.WriteLine(string.Format("结束服务器接收异步消息 {0}", this.receiveStopNum));
                     Console.ForegroundColor = ConsoleColor.White;
                 }
                 return(true);
             }
             string data = msg.Get <string>();
             if (null != data)
             {
                 this.receiveSuNum++;
             }
             else
             {
                 this.receiveErrNum++;
             }
             if (this.receiveErrNum + this.receiveSuNum == 50000)
             {
                 this.endTime = DateTime.Now;
             }
         }
     }
     catch (Exception ex)
     {
         LogManager.WriteLog(LogTypes.Exception, string.Format("[ljl_博彩]跨服消息{0}", ex.ToString()), null, true);
     }
     return(true);
 }
Exemple #21
0
        /// <summary>
        /// 加载精灵类型控件
        /// </summary>
        /// <param name="sprite">引参:对象精灵</param>
        /// <param name="roleID">角色ID</param>
        /// <param name="roleSex">性别</param>
        /// <param name="name">识别名</param>
        /// <param name="sname">角色名</param>
        /// <param name="life">当前生命值</param>
        /// <param name="mana">当前魔法值</param>
        /// <param name="level">等级</param>
        /// <param name="experience">经验值</param>
        /// <param name="buff">属性BUFF加/减持</param>
        /// <param name="facesign">头像</param>
        /// <param name="frameRange">各动作帧数</param>
        /// <param name="effectiveFrame">各动作起效帧</param>
        /// <param name="attackRange">物理攻击距离</param>
        /// <param name="seekRange">索敌距离</param>
        /// <param name="equipmentBody">衣服代号</param>
        /// <param name="equipmentWeapon">武器代号</param>
        /// <param name="coordinate">XY坐标</param>
        /// <param name="direction">朝向</param>
        /// <param name="holdWidth">朝向</param>
        /// <param name="holdHeight">朝向</param>
        private void LoadMonster(Monster monster, CMonsterZone monsterZone, CMonsterStaticInfo monsterInfo, int monsterType,
                                 int roleID, string name, double life, double mana, Point coordinate, double direction, double moveSpeed, int attackRange)
        {
            monster.Name            = name;
            monster.MonsterZoneNode = monsterZone;
            monster.MonsterInfo     = monsterInfo;

            monster.RoleID      = roleID;
            monster.VLife       = life * 10000;//HX_SERVER FOR TEST
            monster.VMana       = mana;
            monster.AttackRange = attackRange;
            monster.Coordinate  = coordinate;
            monster.Direction   = direction;
            monster.MoveSpeed   = moveSpeed;
            monster.MonsterType = monsterType;

            monster.CoordinateChanged += UpdateMonsterEvent;

            SysConOut.WriteLine(string.Format("初始化怪物 {0}----{1}", monster.RoleID, monster.VLife));
            //人为导致搜索的时间间隔错开
            monster.NextSeekEnemyTicks = Global.MonsterSearchTimer + Global.GetRandomNumber(0, Global.MonsterSearchRandomTimer);
        }
Exemple #22
0
        public void SendMove()
        {
            try
            {
                long       tickTime     = DateTime.Now.Ticks;
                SpriteMove szSpriteMove = new SpriteMove();
                szSpriteMove.RoleID  = Convert.ToInt32(g_RoleID);
                szSpriteMove.MapCode = 1;
                szSpriteMove.action  = 2;
                szSpriteMove.toX     = 22500;
                szSpriteMove.toY     = 32300;
                //szSpriteMove.Movec = moveData.moveCost;
                szSpriteMove.extAction      = 2;
                szSpriteMove.fromX          = 2840;
                szSpriteMove.fromY          = 4840;
                szSpriteMove.startMoveTicks = tickTime;
                szSpriteMove.pathString     = "1001(1,283,427):(1,283,427)";

                MemoryStream msResult = new MemoryStream();
                Serializer.Serialize <SpriteMove>(msResult, szSpriteMove);
                byte[]       msSendData     = msResult.ToArray();
                TCPOutPacket szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_GSNetClient.OutPacketPool, msSendData, 0, msSendData.Length,
                                                                            (int)CommandID.CMD_GAME_MOVE);
                if (null == szTCPOutPacket || !m_GSNetClient.SendData(szTCPOutPacket))
                {
                    SysConOut.WriteLine("发送移动数据失败");
                    g_Thread.Abort();
                    g_Thread = null;
                }
                m_GSNetClient.OutPacketPool.Push(szTCPOutPacket);
                //m_GSNetClient.NotifyRecvData()
                msResult.Dispose();
            }
            catch (Exception ex)
            {
                SysConOut.WriteLine(ex.Message);
            }
        }
Exemple #23
0
        /// <summary>
        /// 加载SystemParams.xml里的独立配置
        /// </summary>
        public static void LoadCallPetSystem()
        {
            lock (_CallPetMutex)
            {
                CallPetPriceDict.Clear();
                string[] strPrice = GameManager.systemParamsList.GetParamValueByName("CallPet").Split(',');
                if (null == strPrice || strPrice.Length != 2)
                {
                    SysConOut.WriteLine("        加载SystemParams.xml时出错!!!CallPet不存在");
                    return;
                }
                CallPetPriceDict[1]  = Convert.ToInt32(strPrice[0]);
                CallPetPriceDict[10] = Convert.ToInt32(strPrice[1]);
                double nHour = GameManager.systemParamsList.GetParamValueDoubleByName("FreeCallPet");
                if (nHour <= 0)
                {
                    SysConOut.WriteLine("        加载SystemParams.xml时出错!!!FreeCallPet不存在");
                    return;
                }
                CallPetFreeHour = nHour;

                double nTemp = GameManager.systemParamsList.GetParamValueDoubleByName("ConsumeCallPetJiFen");
                if (nTemp < 0)
                {
                    SysConOut.WriteLine("        加载SystemParams.xml时出错!!!ConsumeCallPetJiFen小于0");
                    return;
                }
                ConsumeCallPetJiFen = nTemp;

                nTemp = GameManager.systemParamsList.GetParamValueDoubleByName("ZhaoHuan");
                if (nTemp < 0)
                {
                    //SysConOut.WriteLine("        加载SystemParams.xml时出错!!!CallPetGoodsID小于0");
                    //return;
                }
                CallPetGoodsID = (int)nTemp;
            }
        }
Exemple #24
0
        /// <summary>
        /// 向某个方向移动到目标附近
        /// 移动可能失败,失败原因 1.相关位置不可走 2.相关位置已经有其他角色或者怪物
        /// </summary>
        /// <param name="nDir"></param>
        /// <returns></returns>
        public static Boolean WalkToObject(IObject obj, Dircetions nDir, IObject targetObj)
        {
            if (null == targetObj || null == obj)
            {
                return(false);
            }

            int nX, nY;

            WalkNearPos(targetObj, nDir, out nX, out nY);

            Point grid   = obj.CurrentGrid;
            int   nCurrX = (int)grid.X;
            int   nCurrY = (int)grid.Y;

            //String pathStr = String.Format("{0}_{1}|{2}_{3}", nCurrX, nCurrY, nX, nY);
            String  pathStr = String.Format("1({0},{1},{2}):({3},{4},{5})", (obj as Monster).CurrentMapCode, nCurrX, nCurrY, (obj as Monster).CurrentMapCode, nX, nY);//HX_SERVER (1,92,130):(1,102,135)
            Boolean fResult = false;

            if (targetObj is GameClient)
            {
                fResult = WalkXY(obj, nX, nY, nDir, pathStr, (targetObj as GameClient).ClientData.RoleID);
            }
            else
            {
                fResult = WalkXY(obj, nX, nY, nDir, pathStr);
            }

            if (fResult)
            {
                SysConOut.WriteLine(String.Format("追击 {0} Path: {1} ", (obj as Monster).RoleID, pathStr));
                //System.Console.WriteLine(String.Format("{0} Path: {1} ", (obj as Monster).RoleID, pathStr));
                //旧传奇代码这儿是隐藏设置,可能用于隐藏魔法
            }

            return(fResult);
        }
 private static void WriteLine(string str, ConsoleColor Color = ConsoleColor.Green)
 {
     Console.ForegroundColor = Color;
     SysConOut.WriteLine(str);
     Console.ForegroundColor = ConsoleColor.White;
 }
Exemple #26
0
 private void SocketConnectState(object sender, SocketConnectEventArgs e)
 {
     SysConOut.WriteLine("SocketReceived " + e.Error + " ErrorMsg = " + e.ErrorMsg + " ErrorStr = " + e.ErrorStr
                         + " NetSocketType = " + e.NetSocketType.ToString());
 }
Exemple #27
0
        public void ThreadFuncation2()
        {
            int szOfest = 11;

            //autoEvent.WaitOne();
            while (true)
            {
                if (m_MoveDataList.Count > 0)
                {
                    mutex.WaitOne();
                    try
                    {
                        TCPOutPacket szTCPOutPacket = null;

                        szTCPOutPacket = m_MoveDataList.Dequeue();

                        string[] fields = null;
                        if (szTCPOutPacket.PacketCmdID < 30000)
                        {
                            fields = Encoding.Default.GetString(szTCPOutPacket.GetPacketBytes(), szOfest, szTCPOutPacket.PacketDataSize - szOfest).Trim().Split(':');
                        }
                        switch (szTCPOutPacket.PacketCmdID)
                        {
                        case (int)TCPServerCmds.CMD_LOGIN_ON1:
                        {
                            m_LNetClient.Disconnect();
                            m_LNetClient.Destroy();

                            if (!fields[0].Equals("0"))
                            {
                                g_Thread1.Start();
                                g_Acc = fields[0];
                                SendRoleData(fields[0]);
                            }
                            else
                            {
                                SysConOut.WriteLine("登陆失败");
                            }
                            break;
                        }

                        case (int)TCPServerCmds.CMD_NTF_EACH_ROLE_ALLOW_CHANGE_NAME:
                        {
                            SysConOut.WriteLine("==============CHANGE_NAME===============");
                            foreach (var s in fields)
                            {
                                SysConOut.WriteLine(s);
                            }
                            break;
                        }

                        case (int)CommandID.CMD_GET_ROLE_LIST:
                        {
                            SysConOut.WriteLine("==============CMD_ROLE_LIST 30003===============");
                            //反序列化
                            MemoryStream        msRecvData            = new MemoryStream(szTCPOutPacket.GetPacketBytes(), szOfest, szTCPOutPacket.PacketDataSize - szOfest);
                            GetRolesListReponse szGetRolesListReponse = Serializer.Deserialize <GetRolesListReponse>(msRecvData);
                            SysConOut.WriteLine("get Role state = " + szGetRolesListReponse.State.ToString());
                            foreach (var i in szGetRolesListReponse.SubRoleinfo)
                            {
                                SysConOut.WriteLine("get Role Role = " + i.RoleID.ToString());
                            }
                            if (szGetRolesListReponse.State == (int)ErrorCode.ERROR_INVALID_ROLE)
                            {
                                var         szRandom      = new Random().Next(100);
                                CreateRoles szCreateRoles = new CreateRoles();
                                szCreateRoles.Acc      = g_Acc;
                                szCreateRoles.UserName = g_Acc + szRandom.ToString();
                                szCreateRoles.Sex      = 0;
                                szCreateRoles.occup    = 0;
                                szCreateRoles.ZoneID   = 0;
                                m_tcpOutPacketPool.Push(szTCPOutPacket);

                                MemoryStream msResult = new MemoryStream();
                                Serializer.Serialize <CreateRoles>(msResult, szCreateRoles);
                                byte[] msSendData = msResult.ToArray();
                                szTCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_GSNetClient.OutPacketPool, msSendData, 0, msSendData.Length, 30002);
                                if (m_GSNetClient.SendData(szTCPOutPacket))
                                {
                                    SysConOut.WriteLine("发送创建角色列表数据成功");
                                }
                                else
                                {
                                    SysConOut.WriteLine("发送创建角色列表数据失败");
                                }

                                m_GSNetClient.OutPacketPool.Push(szTCPOutPacket);
                            }
                            else
                            {
                                foreach (var Roleinfo in szGetRolesListReponse.SubRoleinfo)
                                {
                                    g_RoleID = Roleinfo.RoleID.ToString();
                                    break;
                                }
                                SendInitGame(g_Acc, g_RoleID);
                                Console.Title = "机器人---" + g_RoleID;
                            }
                            break;
                        }

                        case (int)TCPServerCmds.CMD_ROLE_LIST:
                        {
                            SysConOut.WriteLine("==============CMD_ROLE_LIST===============");
                            if (fields[0].Equals("0"))
                            {
                                var szRandom = new Random().Next(100);
                                var result   = StringUtil.substitute("{0}:{1}:{2}:{3}:{4}:{5}:{6}", g_Acc, g_Acc + szRandom.ToString(), 0, 0,
                                                                     String.Format("{0}${1}", g_Acc + szRandom.ToString(), 0), 0, 1);

                                TCPOutPacket _TCPOutPacket = TCPOutPacket.MakeTCPOutPacket(m_GSNetClient.OutPacketPool, result,
                                                                                           (int)TCPServerCmds.CMD_CREATE_ROLE);
                                //创建角色
                                if (m_GSNetClient.SendData(_TCPOutPacket))
                                {
                                    SysConOut.WriteLine("发送创建角色数据成功");
                                }
                                else
                                {
                                    SysConOut.WriteLine("发送创建角色数据失败");
                                }
                                m_GSNetClient.OutPacketPool.Push(_TCPOutPacket);
                            }
                            else
                            {
                                string[] fieldsData = fields[1].Split('$');
                                g_RoleID = fieldsData[0];
                                SendInitGame(g_Acc, g_RoleID);
                                Console.Title = "机器人---" + g_RoleID;
                            }
                            break;
                        }

                        case (int)CommandID.CMD_CREATE_ROLE:
                        {
                            SysConOut.WriteLine("====CMD_CREATE_ROLE  30002=====");
                            MemoryStream       msRecvData           = new MemoryStream(szTCPOutPacket.GetPacketBytes(), szOfest, szTCPOutPacket.PacketDataSize - szOfest);
                            CreateRolesReponse szCreateRolesReponse = Serializer.Deserialize <CreateRolesReponse>(msRecvData);
                            if (szCreateRolesReponse.State == (int)ErrorCode.ERROR_OK)
                            {
                                SendRoleData(g_Acc);
                            }
                            m_tcpOutPacketPool.Push(szTCPOutPacket);
                            break;
                        }

                        case (int)TCPServerCmds.CMD_CREATE_ROLE:
                        {
                            SysConOut.WriteLine("====CMD_CREATE_ROLE=====");

                            if (!fields[0].Equals("0"))
                            {
                                SendRoleData(g_Acc);
                            }
                            break;
                        }

                        case (int)CommandID.CMD_INIT_GAME:
                        {
                            SysConOut.WriteLine("==============CMD_INIT_GAME 30004===============");

                            MemoryStream       msRecvData           = new MemoryStream(szTCPOutPacket.GetPacketBytes(), szOfest, szTCPOutPacket.PacketDataSize - szOfest);
                            InitialGameReponse szInitialGameReponse = Serializer.Deserialize <InitialGameReponse>(msRecvData);

                            SysConOut.WriteLine("CMD_INIT_GAME RoleID = " + szInitialGameReponse.SubRoleinfo.RoleID.ToString() + "  Role = " + g_RoleID.ToString());
                            SendPlayGame(g_RoleID);
                            m_tcpOutPacketPool.Push(szTCPOutPacket);
                            break;
                        }

                        case (int)TCPServerCmds.CMD_INIT_GAME:
                        {
                            SysConOut.WriteLine("==============CMD_INIT_GAME===============");

                            RoleData szRoleData = DataHelper.BytesToObject <RoleData>(szTCPOutPacket.GetPacketBytes(), szOfest, szTCPOutPacket.PacketDataSize - szOfest);
                            SysConOut.WriteLine("CMD_INIT_GAME RoleID = " + szRoleData.RoleID.ToString());
                            SendPlayGame(g_RoleID);
                            break;
                        }

                        case (int)CommandID.CMD_PLAY_GAME:
                        {
                            SysConOut.WriteLine("==============CMD_PLAY_GAME 30005===============");
                            MemoryStream    msRecvData        = new MemoryStream(szTCPOutPacket.GetPacketBytes(), szOfest, szTCPOutPacket.PacketDataSize - szOfest);
                            PlayGameReponse szPlayGameReponse = Serializer.Deserialize <PlayGameReponse>(msRecvData);

                            SysConOut.WriteLine("CMD_PLAY_GAME RoleID = " + szPlayGameReponse.RoleID.ToString());

                            if (g_Thread == null)
                            {
                                g_Thread = new Thread(new ThreadStart(ThreadFuncation));
                            }
                            g_Thread.Start();
                            m_tcpOutPacketPool.Push(szTCPOutPacket);
                            break;
                        }

                        case (int)TCPServerCmds.CMD_PLAY_GAME:
                        {
                            SysConOut.WriteLine("==============CMD_PLAY_GAME===============");

                            if (g_Thread == null)
                            {
                                g_Thread = new Thread(new ThreadStart(ThreadFuncation));
                            }
                            g_Thread.Start();
                            break;
                        }

                        case (int)CommandID.CMD_GAME_MOVE:
                        {
                            SysConOut.WriteLine("==============CMD_GAME_MOVE 30006===============");
                            MemoryStream msRecvData   = new MemoryStream(szTCPOutPacket.GetPacketBytes(), szOfest, szTCPOutPacket.PacketDataSize - szOfest);
                            SpriteMove   szSpriteMove = Serializer.Deserialize <SpriteMove>(msRecvData);


                            SysConOut.WriteLine("CMD_SPR_MOVE Role = " + szSpriteMove.RoleID.ToString()
                                                + " Mapcode = " + szSpriteMove.MapCode.ToString()
                                                + " action = " + szSpriteMove.action.ToString()
                                                + " pathString = " + szSpriteMove.pathString);
                            m_tcpOutPacketPool.Push(szTCPOutPacket);
                            break;
                        }

                        case (int)TCPServerCmds.CMD_SPR_MOVE:
                        {
                            SpriteNotifyOtherMoveData moveData = DataHelper.BytesToObject <SpriteNotifyOtherMoveData>(szTCPOutPacket.GetPacketBytes(), 11, szTCPOutPacket.PacketDataSize - 11);

                            SysConOut.WriteLine("CMD_SPR_MOVE Role = " + moveData.roleID.ToString()
                                                + " Mapcode = " + moveData.mapCode.ToString()
                                                + " action = " + moveData.action.ToString()
                                                + " pathString = " + moveData.pathString);
                            m_tcpOutPacketPool.Push(szTCPOutPacket);
                            break;
                        }
                        }
                    }
                    catch (Exception ex)
                    {
                        SysConOut.WriteLine(ex.Message);
                    }


                    mutex.Release();
                }
                Thread.Sleep(100);
            }
        }
Exemple #28
0
        /// <summary>
        /// 命令包接收完毕后的回调事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private bool TCPCmdPacketEvent(object sender, int doType)
        {
            TCPInPacket tcpInPacket = sender as TCPInPacket;

            if (0 == doType) //正常的登录指令包
            {
                int thisTimeCheckTicks = 0;
                int checkErrorCode     = 0;

                if (0xffff == tcpInPacket.PacketCmdID)
                {
                    String cmdData = new UTF8Encoding().GetString(tcpInPacket.GetPacketBytes(), 0, tcpInPacket.PacketDataSize);
                    if (cmdData == "serveripinfo")
                    {
                        String  strinfo     = string.Format("{0}_{1}", ServerPort, Global.GetLocalAddressIPs());
                        byte [] arrSendData = Encoding.UTF8.GetBytes(strinfo);
                        if (null != arrSendData)
                        {
                            tcpInPacket.CurrentSocket.Send(arrSendData, arrSendData.Length, SocketFlags.None);
                        }
                    }
                    return(false);
                }
                //这里实际上是有一个指令流的拷贝,占用的很零碎的内存,这个是否考虑使用内存池????
                byte[] bytesData = CheckClientDataValid(tcpInPacket.PacketCmdID, tcpInPacket.GetPacketBytes(), tcpInPacket.PacketDataSize, tcpInPacket.LastCheckTicks, out thisTimeCheckTicks, out checkErrorCode);

                if (null != bytesData)
                {
                    tcpInPacket.LastCheckTicks = thisTimeCheckTicks; //记忆此次的心跳数据
//#if false
                    if (UseWorkerPool)
                    {
                        //杰隆的异步处理指令入口代码
                        TCPCmdWrapper wrapper = TCPCmdWrapper.Get(this, tcpInPacket.CurrentSocket, tcpClientPool, tcpRandKey, tcpOutPacketPool, tcpInPacket.PacketCmdID, bytesData, tcpInPacket.PacketDataSize - 1 - 4);

                        TCPSession session = null;
                        if (GameManager.FlagOptimizeLock3)
                        {
                            if (null != tcpInPacket.CurrentSocket)
                            {
                                session = tcpInPacket.CurrentSocket.session;
                            }
                            if (null == session)
                            {
                                LogManager.WriteLog(LogTypes.Error, string.Format("未与客户端建立会话: {0},{1}, 错误码:{2}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket), checkErrorCode));
                                return(false);
                            }
                        }
                        else
                        {
                            lock (tcpSessions)
                            {
                                if (!tcpSessions.TryGetValue(tcpInPacket.CurrentSocket, out session))
                                {
                                    LogManager.WriteLog(LogTypes.Error, string.Format("未与客户端建立会话: {0},{1}, 错误码:{2}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket), checkErrorCode));
                                    return(false);
                                }
                            }
                        }

                        int posCmdNum = 0;
                        session.addTCPCmdWrapper(wrapper, out posCmdNum);
                        if (posCmdNum > 0)
                        {
                            int        banSpeedUpMinutes = GameManager.PlatConfigMgr.GetGameConfigItemInt(PlatConfigNames.BanSpeedUpMinutes2, 10); //加速禁止登陆的时间
                            GameClient client            = GameManager.ClientMgr.FindClient(tcpInPacket.CurrentSocket);
                            if (null != client)
                            {
                                GameManager.ClientMgr.NotifyImportantMsg(this.MySocketListener, tcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("本游戏禁止使用加速软件,{0}分钟内将禁止登陆!"), banSpeedUpMinutes), GameInfoTypeIndexes.Error, ShowGameInfoTypes.HintAndBox);
                                BanManager.BanRoleName(Global.FormatRoleName(client, client.ClientData.RoleName), banSpeedUpMinutes);
                            }

                            LogManager.WriteLog(LogTypes.Error, string.Format("通过POSITION指令判断客户端加速: {0}, 指令个数:{1}, 断开连接", Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket), posCmdNum));
                            return(false);
                        }

                        taskExecutor.execute(new ProcessSessionTask(session));
                    }
//#else
                    else
                    {
                        TCPSession session = null;
                        if (GameManager.FlagOptimizeLock3)
                        {
                            if (null != tcpInPacket.CurrentSocket)
                            {
                                session = tcpInPacket.CurrentSocket.session;
                            }
                            if (null == session)
                            {
                                LogManager.WriteLog(LogTypes.Error, string.Format("未与客户端建立会话: {0},{1}, 错误码:{2}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket), checkErrorCode));
                                return(false);
                            }
                        }
                        else
                        {
                            lock (tcpSessions)
                            {
                                if (!tcpSessions.TryGetValue(tcpInPacket.CurrentSocket, out session))
                                {
                                    LogManager.WriteLog(LogTypes.Error, string.Format("未与客户端建立会话: {0},{1}, 错误码:{2}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket), checkErrorCode));
                                    return(false);
                                }
                            }
                        }

                        int posCmdNum = 0;
                        session.CheckCmdNum(tcpInPacket.PacketCmdID, out posCmdNum);
                        if (posCmdNum > 0)
                        {
                            int        banSpeedUpMinutes = GameManager.PlatConfigMgr.GetGameConfigItemInt(PlatConfigNames.BanSpeedUpMinutes2, 10); //加速禁止登陆的时间
                            GameClient client            = GameManager.ClientMgr.FindClient(tcpInPacket.CurrentSocket);
                            if (null != client)
                            {
                                if (client.CheckCheatData.ProcessBooster)
                                {
                                    GameManager.ClientMgr.NotifyImportantMsg(this.MySocketListener, tcpOutPacketPool, client, StringUtil.substitute(Global.GetLang("本游戏禁止使用加速软件,{0}分钟内将禁止登陆!"), banSpeedUpMinutes), GameInfoTypeIndexes.Error, ShowGameInfoTypes.HintAndBox);
                                    BanManager.BanRoleName(Global.FormatRoleName(client, client.ClientData.RoleName), banSpeedUpMinutes);

                                    LogManager.WriteLog(LogTypes.Error, string.Format("通过POSITION指令判断客户端加速: {0}, 指令个数:{1}, 断开连接", Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket), posCmdNum));
                                    return(false);
                                }
                                else if (client.CheckCheatData.ProcessBoosterTicks == 0)
                                {
                                    client.CheckCheatData.ProcessBoosterTicks = TimeUtil.NOW();
                                }
                            }
                        }

                        TCPOutPacket         tcpOutPacket = null;
                        TCPProcessCmdResults result       = TCPProcessCmdResults.RESULT_FAILED;
                        long processBeginTime             = TimeUtil.NowEx();
                        if (tcpInPacket.PacketCmdID > 30000)
                        {
                            result = CCTCPCmdHandler.CCProcessCmd(this, tcpInPacket.CurrentSocket, tcpClientPool, tcpRandKey, tcpOutPacketPool, tcpInPacket.PacketCmdID, bytesData, tcpInPacket.PacketDataSize - 1 - 4, out tcpOutPacket);
                        }
                        else
                        {
                            result = TCPCmdHandler.ProcessCmd(this, tcpInPacket.CurrentSocket, tcpClientPool, tcpRandKey, tcpOutPacketPool, tcpInPacket.PacketCmdID, bytesData, tcpInPacket.PacketDataSize - 1 - 4, out tcpOutPacket);
                        }

                        long processTime = (TimeUtil.NowEx() - processBeginTime);
                        if (GameManager.StatisticsMode > 0 || processTime > 50 || result == TCPProcessCmdResults.RESULT_FAILED)
                        {
                            RecordCmdDetail(tcpInPacket.PacketCmdID, processTime, tcpInPacket.PacketDataSize, result);
                        }

                        if (result == TCPProcessCmdResults.RESULT_DATA && null != tcpOutPacket)
                        {
                            // Console.WriteLine("===>>> tcpOutPacket==== " + tcpOutPacket.PacketCmdID.ToString());
                            //向登陆客户端返回数据
                            socketListener.SendData(tcpInPacket.CurrentSocket, tcpOutPacket);
                        }
                        else if (result == TCPProcessCmdResults.RESULT_FAILED)//解析失败, 直接关闭连接
                        {
                            if (tcpInPacket.PacketCmdID != (int)TCPGameServerCmds.CMD_LOG_OUT)
                            {
                                SysConOut.WriteLine(string.Format("解析并执行命令失败: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket)));
                                LogManager.WriteLog(LogTypes.Error, string.Format("解析并执行命令失败: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket)));
                            }
                            return(false);
                        }
                    }
//#endif
                }
                else
                {
                    var    _s  = tcpInPacket.CurrentSocket;
                    string uid = _s != null?GameManager.OnlineUserSession.FindUserID(_s) : "socket is nil";

                    SysConOut.WriteLine(string.Format("校验客户端发送的指令数据完整性失败: {0},{1}, 错误码:{2}, uid={3}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket), checkErrorCode, uid));

                    LogManager.WriteLog(LogTypes.Error, string.Format("校验客户端发送的指令数据完整性失败: {0},{1}, 错误码:{2}, uid={3}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket), checkErrorCode, uid));
                    return(false);
                }
            }
            else if (1 == doType) //正常的登录指令包//策略验证请求
            {
                //直接发送策略数据
                DirectSendPolicyFileData(tcpInPacket);
            }
            else
            {
                SysConOut.WriteLine(string.Format("解析并执行命令时类型未知: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket)));
                LogManager.WriteLog(LogTypes.Error, string.Format("解析并执行命令时类型未知: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket)));
                //socketListener.CloseSocket(tcpInPacket.CurrentSocket);
                return(false);
            }

            return(true);
        }
Exemple #29
0
        public void InitExcel()
        {
            string fullPathFileName = Logic.Global.GameResPath(SkillPathExcel);

            Excel.Application xlApp = new Excel.Application();
            xlApp.DisplayAlerts  = false;
            xlApp.Visible        = false;
            xlApp.ScreenUpdating = false;
            Excel.Workbook xlsWorkBook = xlApp.Workbooks.Open(fullPathFileName, System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                                              System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing,
                                                              System.Type.Missing, System.Type.Missing);
            Excel.Worksheet sheet = xlsWorkBook.Worksheets[1];//工作薄从1开始,不是0
            int             i     = 1;
            int             j     = 1;

            try
            {
                int         iRowCount = sheet.UsedRange.Rows.Count;
                int         iColCount = sheet.UsedRange.Columns.Count;
                Excel.Range range;

                for (; i < iRowCount; i++)
                {
                    SkillObject skillObject = new SkillObject();
                    for (j = 1; j < iColCount; j++)
                    {
                        range = sheet.Cells[i, j];
                        switch (j)
                        {
                        case 1:
                        {
                            skillObject.SkillID = Convert.ToInt32((range.Value2 == null) ? "" : range.Text.ToString());
                            break;
                        }

                        case 2:
                        {
                            skillObject.SkillName = (range.Value2 == null) ? "" : range.Text.ToString();
                            break;
                        }

                        case 3:
                        {
                            skillObject.Remark = (range.Value2 == null) ? "" : range.Text.ToString();
                            break;
                        }

                        case 4:
                        {
                            skillObject.Occupation = Convert.ToInt32((range.Value2 == null) ? "" : range.Text.ToString());
                            break;
                        }

                        case 5:
                        {
                            skillObject.NeedMP = Convert.ToInt32((range.Value2 == null) ? "" : range.Text.ToString());
                            break;
                        }

                        case 6:
                        {
                            skillObject.NeedHP = Convert.ToInt32((range.Value2 == null) ? "" : range.Text.ToString());
                            break;
                        }

                        case 7:
                        {
                            skillObject.NeedLV = Convert.ToInt32((range.Value2 == null) ? "" : range.Text.ToString());
                            break;
                        }


                        case 13:
                        {
                            skillObject.SkillType = Convert.ToInt32((range.Value2 == null) ? "" : range.Text.ToString());
                            break;
                        }

                        case 15:
                        {
                            skillObject.HarmType = Convert.ToInt32((range.Value2 == null) ? "" : range.Text.ToString());
                            break;
                        }

                        case 17:
                        {
                            skillObject.HardHarm = Convert.ToInt32((range.Value2 == null) ? "" : range.Text.ToString());
                            break;
                        }

                        case 18:
                        {
                            skillObject.EffectList = null;
                            break;
                        }

                        case 19:
                        {
                            skillObject.BuffList = null;
                            break;
                        }

                        case 20:
                        {
                            skillObject.Distance = Convert.ToInt32((range.Value2 == null) ? "" : range.Text.ToString());
                            break;
                        }

                        case 21:
                        {
                            skillObject.CDTime = Convert.ToInt32((range.Value2 == null) ? "" : range.Text.ToString());
                            break;
                        }

                        case 16:
                        {
                            skillObject.SkillHarmList = new List <int>();
                            string[] szSkillHarm = ((range.Value2 == null) ? "" : range.Text.ToString()).Split(',');
                            foreach (var s in szSkillHarm)
                            {
                                skillObject.SkillHarmList.Add(Convert.ToInt32(s));
                            }
                            break;
                        }

                        case 14:
                        {
                            skillObject.RangeType = new List <int>();
                            string[] szRangeType = ((range.Value2 == null) ? "" : range.Text.ToString()).Split(',');
                            foreach (var s in szRangeType)
                            {
                                skillObject.RangeType.Add(Convert.ToInt32(s));
                            }
                            break;
                        }

                        case 8:
                        {
                            skillObject.NeedWeapons = new List <int>();
                            string[] szNeedWeapons = ((range.Value2 == null) ? "" : range.Text.ToString()).Split(',');
                            foreach (var s in szNeedWeapons)
                            {
                                skillObject.NeedWeapons.Add(Convert.ToInt32(s));
                            }
                            break;
                        }

                        case 9:
                        {
                            skillObject.NeedSkill = new List <int>();
                            string[] szNeedSkill = ((range.Value2 == null) ? "" : range.Text.ToString()).Split(',');
                            foreach (var s in szNeedSkill)
                            {
                                skillObject.NeedSkill.Add(Convert.ToInt32(s));
                            }
                            break;
                        }

                        case 10:
                        {
                            skillObject.BecomeNeedSkill = new List <int>();
                            string[] szBecomeNeedSkill = ((range.Value2 == null) ? "" : range.Text.ToString()).Split(',');
                            foreach (var s in szBecomeNeedSkill)
                            {
                                skillObject.BecomeNeedSkill.Add(Convert.ToInt32(s));
                            }

                            break;
                        }

                        case 11:
                        {
                            skillObject.NextSkill = new List <int>();
                            string[] szNextSkill = ((range.Value2 == null) ? "" : range.Text.ToString()).Split(',');
                            foreach (var s in szNextSkill)
                            {
                                skillObject.NextSkill.Add(Convert.ToInt32(s));
                            }
                            break;
                        }

                        case 12:
                        {
                            skillObject.BecomeNextSkill = new List <int>();
                            string[] szBecomeNextSkill = ((range.Value2 == null) ? "" : range.Text.ToString()).Split(',');
                            foreach (var s in szBecomeNextSkill)
                            {
                                skillObject.BecomeNextSkill.Add(Convert.ToInt32(s));
                            }
                            break;
                        }
                        }
                    }
                    SystemSkillList.Add(skillObject.SkillID, skillObject);
                }
            }
            catch (Exception ex)
            {
                SysConOut.WriteLine(string.Format("加载技能Excel配置文件:{0}, 失败。没有找到相关XML配置文件[{1}] i ={2}  j={3}!", SkillPathName, ex.Message, i, j));
                // throw new Exception(string.Format("加载技能Excel配置文件:{0}, 失败。没有找到相关XML配置文件!", SkillPathName));
            }
            finally
            {
                xlsWorkBook.Close(false, System.Type.Missing, System.Type.Missing);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsWorkBook);
                xlsWorkBook = null;
                xlApp.Workbooks.Close();
                xlApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
                xlApp = null;
            }
        }
Exemple #30
0
        public void InitSkill()
        {
            //InitExcel();
            // return;
            XElement szxXml = null;

            try
            {
                string fullPathFileName = Logic.Global.GameResPath(SkillPathName);
                szxXml = XElement.Load(fullPathFileName);
                if (null == szxXml)
                {
                    throw new Exception(string.Format("加载技能xml配置文件:{0}, 失败。没有找到相关XML配置文件!", fullPathFileName));
                }
                SystemXmlItem          systemXmlItem = new SystemXmlItem();
                IEnumerable <XElement> nodes         = szxXml.Elements(SkillRootName).Elements();
                foreach (var node in nodes)
                {
                    systemXmlItem.XMLNode = node;

                    SkillObject skillObject = new SkillObject()
                    {
                        SkillID         = systemXmlItem.GetIntValue("SkillID"),
                        SkillName       = systemXmlItem.GetStringValue("Name"),
                        Remark          = systemXmlItem.GetStringValue("Remark"),
                        NeedMP          = systemXmlItem.GetIntValue("NeedMP"),
                        NeedHP          = systemXmlItem.GetIntValue("NeedHP"),
                        SkillType       = systemXmlItem.GetIntValue("SkillType"),
                        Distance        = systemXmlItem.GetIntValue("Distance"),
                        CDTime          = systemXmlItem.GetIntValue("Cooling"),
                        HarmType        = systemXmlItem.GetIntValue("HarmType"),
                        Occupation      = systemXmlItem.GetIntValue("NeedJob"),
                        HardHarm        = systemXmlItem.GetIntValue("HardHarm"),
                        NeedLV          = systemXmlItem.GetIntValue("NeedLV"),
                        SkillLevel      = systemXmlItem.GetIntValue("SkillLevel"),
                        Ballistic       = systemXmlItem.GetIntValue("Ballistic"),
                        NeedSkill       = null,
                        BecomeNeedSkill = null,
                        NextSkill       = null,
                        BecomeNextSkill = null,
                        BuffList        = null,
                        EffectList      = null,
                        RangeType       = null,
                        NeedWeapons     = null,
                        SkillHarmList   = null,
                        TargetType      = systemXmlItem.GetIntValue("TargetType")
                    };
                    //务器类型
                    skillObject.NeedWeapons = new List <int>();
                    string[] szNeedWeapons = systemXmlItem.GetStringValue("NeedWeapons").Split('#');
                    foreach (var s in szNeedWeapons)
                    {
                        skillObject.NeedWeapons.Add(Convert.ToInt32(s));
                    }
                    //前置技能
                    skillObject.NeedSkill = new List <int>();
                    string[] szNeedSkill = systemXmlItem.GetStringValue("NeedSkill").Split('#');
                    foreach (var s in szNeedSkill)
                    {
                        skillObject.NeedSkill.Add(Convert.ToInt32(s));
                    }
                    //开化后前置技能
                    skillObject.BecomeNeedSkill = new List <int>();
                    string[] szBecomeNeedSkill = systemXmlItem.GetStringValue("BecomeNeedSkill").Split('#');
                    foreach (var s in szBecomeNeedSkill)
                    {
                        skillObject.BecomeNeedSkill.Add(Convert.ToInt32(s));
                    }
                    //后置技能
                    skillObject.NextSkill = new List <int>();
                    string[] szNextSkill = systemXmlItem.GetStringValue("NextSkill").Split('#');
                    foreach (var s in szNextSkill)
                    {
                        skillObject.NextSkill.Add(Convert.ToInt32(s));
                    }
                    //开花后得后置技能
                    skillObject.BecomeNextSkill = new List <int>();
                    string[] szBecomeNextSkill = systemXmlItem.GetStringValue("BecomeNextSkill").Split('#');
                    foreach (var s in szBecomeNextSkill)
                    {
                        skillObject.BecomeNextSkill.Add(Convert.ToInt32(s));
                    }
                    //影响范围
                    skillObject.RangeType = new List <int>();
                    string[] szRangeType = systemXmlItem.GetStringValue("RangeType").Split('#');
                    foreach (var s in szRangeType)
                    {
                        skillObject.RangeType.Add(Convert.ToInt32(s));
                    }
                    //技能伤害
                    skillObject.SkillHarmList = new List <int>();
                    string[] szSkillHarm = systemXmlItem.GetStringValue("SkillHarm").Split('#');
                    foreach (var s in szSkillHarm)
                    {
                        skillObject.SkillHarmList.Add(Convert.ToInt32(s));
                    }
                    //释放目标
                    //skillObject.TargetTypeList = new List<int>();
                    //string[] szTargetType = systemXmlItem.GetStringValue("TargetType").Split('#');
                    //foreach (var s in szTargetType)
                    //{
                    //    skillObject.TargetTypeList.Add(Convert.ToInt32(s));
                    //}
                    //释放类型
                    skillObject.ReleaseTypeList = new List <int>();
                    string[] szReleaseType = systemXmlItem.GetStringValue("ReleaseType").Split('#');
                    foreach (var s in szSkillHarm)
                    {
                        skillObject.ReleaseTypeList.Add(Convert.ToInt32(s));
                    }

                    SystemSkillList.Add(skillObject.SkillID, skillObject);
                    //SysConOut.WriteLine(string.Format("加载技能配置文件:{0},", skillObject.SkillID));
                }
            }
            catch (Exception ex)
            {
                SysConOut.WriteLine(string.Format("加载技能Excel配置文件:{0}, 失败。没有找到相关XML配置文件[{1}]!", SkillPathName, ex.Message));

                // throw new Exception(string.Format("加载技能xxml配置文件:{0}, 失败。没有找到相关XML配置文件!", SkillPathName));
            }
            SysConOut.WriteLine(string.Format("加载技能配置文件:{0},", SystemSkillList.Count));
        }