コード例 #1
0
ファイル: RobotClient.cs プロジェクト: CancerRobot/Robot
        public void SpriteHeart()
        {
            String strcmd = "";

            strcmd = string.Format("{0}:{1}:{2}", RoleID, Token, DateTime.Now.Ticks / 10000);
            _tcpClient.SendData(TCPOutPacket.MakeTCPOutPacket(strcmd, (int)(TCPGameServerCmds.CMD_SPR_CLIENTHEART)));
        }
コード例 #2
0
        public static TCPProcessCmdResults ProcessDBUpdateUserLimitGoodsUsedNumCmd(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID), null, true);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            try
            {
                string[] fields = cmdData.Split(new char[]
                {
                    ':'
                });
                if (fields.Length != 5)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}", (TCPGameServerCmds)nID, fields.Length, cmdData), null, true);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                int        roleID     = Convert.ToInt32(fields[0]);
                int        goodsID    = Convert.ToInt32(fields[1]);
                int        dayID      = Convert.ToInt32(fields[2]);
                int        usedNum    = Convert.ToInt32(fields[3]);
                string     stage      = fields[4];
                DBRoleInfo dbRoleInfo = dbMgr.GetDBRoleInfo(ref roleID);
                if (null == dbRoleInfo)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("发起请求的角色不存在,CMD={0}, RoleID={1}", (TCPGameServerCmds)nID, roleID), null, true);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                int    ret = DBWriter.AddUserLimitGoodsBuyItem(dbMgr, dbRoleInfo.UserID, goodsID, dayID, usedNum, stage);
                string strcmd;
                if (ret < 0)
                {
                    strcmd = string.Format("{0}:{1}", roleID, -1);
                    LogManager.WriteLog(LogTypes.Error, string.Format("添加限购物品的历史记录失败,CMD={0}, RoleID={1}", (TCPGameServerCmds)nID, roleID), null, true);
                }
                else
                {
                    strcmd = string.Format("{0}:{1}", roleID, 0);
                }
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "", false, false);
            }
            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
            return(TCPProcessCmdResults.RESULT_DATA);
        }
コード例 #3
0
 public static TCPProcessCmdResults ProcessUpdateOrnamentDataCmd(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
 {
     tcpOutPacket = null;
     try
     {
         OrnamentUpdateDbData dbData     = DataHelper.BytesToObject <OrnamentUpdateDbData>(data, 0, count);
         DBRoleInfo           dbRoleInfo = dbMgr.GetDBRoleInfo(ref dbData.RoleId);
         if (null == dbRoleInfo)
         {
             LogManager.WriteLog(LogTypes.Error, string.Format("发起请求的角色不存在,CMD={0}, RoleID={1}", (TCPGameServerCmds)nID, dbData.RoleId), null, true);
             tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
             return(TCPProcessCmdResults.RESULT_DATA);
         }
         lock (dbRoleInfo)
         {
             if (null == dbRoleInfo.OrnamentDataDict)
             {
                 dbRoleInfo.OrnamentDataDict = new Dictionary <int, OrnamentData>();
             }
             dbRoleInfo.OrnamentDataDict[dbData.Data.ID] = dbData.Data;
         }
         DBWriter.UpdateOramentData(dbMgr, dbData);
         tcpOutPacket = DataHelper.ObjectToTCPOutPacket <bool>(true, pool, nID);
         return(TCPProcessCmdResults.RESULT_DATA);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, "", false, false);
     }
     tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
     return(TCPProcessCmdResults.RESULT_DATA);
 }
コード例 #4
0
        /// <summary>
        /// 获取领地信息字典项的发送tcp对象
        /// </summary>
        public TCPOutPacket GetBangHuiLingDiItemsDictTCPOutPacket(TCPOutPacketPool pool, int cmdID)
        {
            Dictionary <int, BangHuiLingDiItemData> bangHuiLingDiItemDataDict = new Dictionary <int, BangHuiLingDiItemData>();
            BangHuiLingDiInfoData bangHuiLingDiInfoData = null;

            lock (_BangHuiLingDiItemsDict)
            {
                foreach (var key in _BangHuiLingDiItemsDict.Keys)
                {
                    bangHuiLingDiInfoData          = _BangHuiLingDiItemsDict[key];
                    bangHuiLingDiItemDataDict[key] = new BangHuiLingDiItemData()
                    {
                        LingDiID      = bangHuiLingDiInfoData.LingDiID,
                        BHID          = bangHuiLingDiInfoData.BHID,
                        ZoneID        = bangHuiLingDiInfoData.ZoneID,
                        BHName        = bangHuiLingDiInfoData.BHName,
                        LingDiTax     = bangHuiLingDiInfoData.LingDiTax,
                        WarRequest    = bangHuiLingDiInfoData.WarRequest,
                        AwardFetchDay = bangHuiLingDiInfoData.AwardFetchDay,
                    };
                }
            }

            TCPOutPacket tcpOutPacket = DataHelper.ObjectToTCPOutPacket <Dictionary <int, BangHuiLingDiItemData> >(bangHuiLingDiItemDataDict, pool, cmdID);

            return(tcpOutPacket);
        }
コード例 #5
0
ファイル: QingGongYanManager.cs プロジェクト: chenchungit/ky
        /// <summary>
        /// 申请当前是否庆功宴已经开启了
        /// </summary>
        public TCPProcessCmdResults ProcessCMD_SPR_QueryQingGongYanOpenCMD(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception) //解析错误
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket)));
                return(TCPProcessCmdResults.RESULT_FAILED);
            }

            try
            {
                int result = (QingGongYanNpc == null) ? 0 : 1;

                string strcmd = string.Format("{0}", result);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "ProcessJoinQingGongYanCMD", false);
            }

            return(TCPProcessCmdResults.RESULT_FAILED);
        }
コード例 #6
0
ファイル: SocketListener.cs プロジェクト: qiuhoude/mu_server
        internal bool SendData(TMSKSocket s, TCPOutPacket tcpOutPacket, bool pushBack = true)
        {
            if (s != null && tcpOutPacket != null)
            {
                ushort sendCmdId = tcpOutPacket.PacketCmdID;
                if (s.magic > 0 && sendCmdId > 100)
                {
                    sendCmdId += s.magic;
                }
                Array.Copy(BitConverter.GetBytes(sendCmdId), 0, tcpOutPacket.GetPacketBytes(), 4, 2);
            }
            bool bRet = false;

            if (null != s)
            {
                if (s.Connected)
                {
                    bRet = Global._SendBufferManager.AddOutPacket(s, tcpOutPacket);
                }
            }
            if (pushBack)
            {
                Global._TCPManager.TcpOutPacketPool.Push(tcpOutPacket);
            }
            return(bRet);
        }
コード例 #7
0
        private bool TCPCmdPacketEvent(object sender)
        {
            TCPInPacket  tcpInPacket  = sender as TCPInPacket;
            TCPOutPacket tcpOutPacket = null;
            int          flag         = 0;
            bool         result2;

            if (!this.inputServers.TryGetValue(tcpInPacket.CurrentSocket, out flag))
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("未建立会话或会话已关闭: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket)), null, true);
                result2 = false;
            }
            else
            {
                long processBeginTime       = TimeUtil.NowEx();
                TCPProcessCmdResults result = PlatTCPManager.ProcessCmd(tcpInPacket.CurrentSocket, this.tcpOutPacketPool, (int)tcpInPacket.PacketCmdID, tcpInPacket.GetPacketBytes(), tcpInPacket.PacketDataSize, out tcpOutPacket);
                long processTime            = TimeUtil.NowEx() - processBeginTime;
                if (result == TCPProcessCmdResults.RESULT_DATA && null != tcpOutPacket)
                {
                    this.socketListener.SendData(tcpInPacket.CurrentSocket, tcpOutPacket);
                }
                else if (result == TCPProcessCmdResults.RESULT_FAILED)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("解析并执行命令失败: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket)), null, true);
                    return(false);
                }
                result2 = true;
            }
            return(result2);
        }
コード例 #8
0
 public static TCPProcessCmdResults ProcTalentModify(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
 {
     tcpOutPacket = null;
     string[] fields = null;
     try
     {
         int length = 6;
         if (!CheckHelper.CheckTCPCmdFields(nID, data, count, out fields, length))
         {
             tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, 1.ToString(), nID);
             return(TCPProcessCmdResults.RESULT_DATA);
         }
         int    roleID     = Convert.ToInt32(fields[0]);
         int    totalCount = Convert.ToInt32(fields[1]);
         long   exp        = Convert.ToInt64(fields[2]);
         long   expAdd     = Convert.ToInt64(fields[3]);
         int    isUp       = Convert.ToInt32(fields[4]);
         int    zoneID     = Convert.ToInt32(fields[5]);
         string strcmd     = TalentManager.TalentInfoModify(dbMgr, roleID, totalCount, exp, expAdd, isUp, zoneID);
         tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
         return(TCPProcessCmdResults.RESULT_DATA);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, "", false, false);
     }
     tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, 1.ToString(), nID);
     return(TCPProcessCmdResults.RESULT_DATA);
 }
コード例 #9
0
ファイル: SocketListener.cs プロジェクト: qiuhoude/mu_server
        internal bool SendData(Socket s, TCPOutPacket tcpOutPacket)
        {
            SocketAsyncEventArgs writeEventArgs = this.writePool.Pop();

            if (null == writeEventArgs)
            {
                writeEventArgs            = new SocketAsyncEventArgs();
                writeEventArgs.Completed += this.OnIOCompleted;
                writeEventArgs.UserToken  = new AsyncUserToken
                {
                    CurrentSocket = null,
                    Tag           = null
                };
            }
            writeEventArgs.SetBuffer(tcpOutPacket.GetPacketBytes(), 0, tcpOutPacket.PacketDataSize);
            (writeEventArgs.UserToken as AsyncUserToken).CurrentSocket = s;
            (writeEventArgs.UserToken as AsyncUserToken).Tag           = tcpOutPacket;
            bool exception = false;

            if (!this._SendAsync(writeEventArgs, out exception))
            {
                this.ProcessSend(writeEventArgs);
            }
            return(!exception);
        }
コード例 #10
0
ファイル: TCPManager.cs プロジェクト: qiuhoude/mu_server
        private bool TCPCmdPacketEvent(object sender)
        {
            TCPInPacket      tcpInPacket  = sender as TCPInPacket;
            TCPOutPacket     tcpOutPacket = null;
            GameServerClient client       = null;
            bool             result2;

            if (!this.gameServerClients.TryGetValue(tcpInPacket.CurrentSocket, out client))
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("未建立会话或会话已关闭: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket)));
                result2 = false;
            }
            else
            {
                TCPProcessCmdResults result = TCPCmdHandler.ProcessCmd(client, this.DBMgr, this.tcpOutPacketPool, (int)tcpInPacket.PacketCmdID, tcpInPacket.GetPacketBytes(), tcpInPacket.PacketDataSize, out tcpOutPacket);
                if (result == TCPProcessCmdResults.RESULT_DATA && null != tcpOutPacket)
                {
                    this.socketListener.SendData(tcpInPacket.CurrentSocket, tcpOutPacket);
                }
                else if (result == TCPProcessCmdResults.RESULT_FAILED)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("解析并执行命令失败: {0},{1}, 关闭连接", (TCPGameServerCmds)tcpInPacket.PacketCmdID, Global.GetSocketRemoteEndPoint(tcpInPacket.CurrentSocket)));
                    return(false);
                }
                result2 = true;
            }
            return(result2);
        }
コード例 #11
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);
        }
コード例 #12
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);
        }
コード例 #13
0
 public TCPProcessCmdResults transmission(TMSKSocket socket, int nID, byte[] data, int count)
 {
     try
     {
         string cmdData = new UTF8Encoding().GetString(data, 0, count);
     }
     catch (Exception)
     {
         LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false)), null, true);
         return(TCPProcessCmdResults.RESULT_FAILED);
     }
     try
     {
         byte[] bytesData = Global.SendAndRecvData <byte[]>(nID, data, socket.ServerId, 0);
         if (null == bytesData)
         {
             LogManager.WriteLog(LogTypes.Error, string.Format("与DBServer通讯失败, CMD={0}", (TCPGameServerCmds)nID), null, true);
             return(TCPProcessCmdResults.RESULT_FAILED);
         }
         int          length       = BitConverter.ToInt32(bytesData, 0);
         ushort       cmd          = BitConverter.ToUInt16(bytesData, 4);
         TCPOutPacket tcpOutPacket = TCPOutPacketPool.getInstance().Pop();
         tcpOutPacket.PacketCmdID = cmd;
         tcpOutPacket.FinalWriteData(bytesData, 6, length - 2);
         TCPManager.getInstance().MySocketListener.SendData(socket, tcpOutPacket, true);
         return(TCPProcessCmdResults.RESULT_OK);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(socket), false, false);
     }
     return(TCPProcessCmdResults.RESULT_FAILED);
 }
コード例 #14
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);
        }
コード例 #15
0
 public static TCPProcessCmdResults ProcTalentEffectClear(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
 {
     tcpOutPacket = null;
     string[] fields = null;
     try
     {
         int length = 2;
         if (!CheckHelper.CheckTCPCmdFields(nID, data, count, out fields, length))
         {
             tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, 1.ToString(), nID);
             return(TCPProcessCmdResults.RESULT_DATA);
         }
         int    roleID = Convert.ToInt32(fields[0]);
         int    zoneID = Convert.ToInt32(fields[1]);
         string strcmd = TalentManager.TalentEffectClear(dbMgr, roleID, zoneID);
         tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
         return(TCPProcessCmdResults.RESULT_DATA);
     }
     catch (Exception ex)
     {
         DataHelper.WriteFormatExceptionLog(ex, "", false, false);
     }
     tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, 1.ToString(), nID);
     return(TCPProcessCmdResults.RESULT_DATA);
 }
コード例 #16
0
        /// 发送数据
        public byte[] SendData(TCPOutPacket tcpOutPacket)
        {
            lock (MutexSocket)
            {
                if (null == _Socket)
                {
                    return(null);                 //还没连接
                }
                try
                {
                    //字节排序
                    DataHelper.SortBytes(tcpOutPacket.GetPacketBytes(), 0, tcpOutPacket.PacketDataSize);

                    //将数据发送给对方
                    _Socket.Send(tcpOutPacket.GetPacketBytes(), tcpOutPacket.PacketDataSize, SocketFlags.None);
                }
                catch (Exception)
                {
                    //断开连接
                    Disconnect();

                    LogManager.WriteLog(LogTypes.Error, string.Format("{0}, 与GameServer: {1}通讯失败", ListIndex, Global.GetSocketRemoteEndPoint(_Socket)));
                }

                return(null);
            }
        }
コード例 #17
0
        /// <summary>
        /// 向客户端发送数据
        /// </summary>
        /// <param name="data"></param>
        internal bool SendData(Socket s, TCPOutPacket tcpOutPacket)
        {
            SocketAsyncEventArgs writeEventArgs = this.writePool.Pop(); //线程安全的操作

            if (null == writeEventArgs)
            {
                writeEventArgs            = new SocketAsyncEventArgs();
                writeEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(OnIOCompleted);
                writeEventArgs.UserToken  = new AsyncUserToken()
                {
                    CurrentSocket = null, Tag = null
                };
            }

            //字节排序
            //DataHelper.SortBytes(tcpOutPacket.GetPacketBytes(), 0, tcpOutPacket.PacketDataSize);

            writeEventArgs.SetBuffer(tcpOutPacket.GetPacketBytes(), 0, tcpOutPacket.PacketDataSize);
            (writeEventArgs.UserToken as AsyncUserToken).CurrentSocket = s;
            (writeEventArgs.UserToken as AsyncUserToken).Tag           = (object)tcpOutPacket;

            bool    exception      = false;
            Boolean willRaiseEvent = _SendAsync(writeEventArgs, out exception);

            if (!willRaiseEvent)
            {
                this.ProcessSend(writeEventArgs);
            }

            return(!exception);
        }
コード例 #18
0
        /// <summary>
        // 通知客户端
        /// </summary>
        public static void SendMsgToClientForExperienceCopyMapInfo(GameClient client, int nWave)
        {
            ExperienceCopyScene tmpExSceneInfo = null;


            // 此处需要加锁
            lock (m_ExperienceListCopyMapsInfo)
            {
                m_ExperienceListCopyMapsInfo.TryGetValue(client.ClientData.FuBenSeqID, out tmpExSceneInfo);
            }

            if (tmpExSceneInfo == null)
            {
                return;
            }

            int nRealyWave = nWave;
            int nTotalWave = Data.ExperienceCopyMapDataInfoList[client.ClientData.MapCode].MonsterIDList.Count;

            if (nRealyWave > nTotalWave)
            {
                nRealyWave = nTotalWave;
            }

            string       strcmd       = string.Format("{0}:{1}:{2}", nRealyWave, nTotalWave, tmpExSceneInfo.m_ExperienceCopyMapRemainMonsterNum);
            TCPOutPacket tcpOutPacket = null;

            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(Global._TCPManager.TcpOutPacketPool, strcmd, (int)TCPGameServerCmds.CMD_SPR_EXPERIENCECOPYMAPINFO);
            Global._TCPManager.MySocketListener.SendData(client.ClientSocket, tcpOutPacket);
        }
コード例 #19
0
        public static TCPOutPacket ProcessGetWaBaoGoodsData(GameClient client, TCPOutPacketPool pool, int cmd)
        {
            TCPOutPacket result;

            if (null == client.ClientData.WaBaoGoodsData)
            {
                string strcmd = string.Format("{0}:{1}", -1, client.ClientData.RoleID);
                result = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, cmd);
            }
            else if (!Global.CanAddGoods(client, client.ClientData.WaBaoGoodsData.GoodsID, client.ClientData.WaBaoGoodsData.GCount, client.ClientData.WaBaoGoodsData.Binding, client.ClientData.WaBaoGoodsData.Endtime, true, false))
            {
                string strcmd = string.Format("{0}:{1}", -10, client.ClientData.RoleID);
                result = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, cmd);
            }
            else
            {
                int dbRet = Global.AddGoodsDBCommand(pool, client, client.ClientData.WaBaoGoodsData.GoodsID, client.ClientData.WaBaoGoodsData.GCount, client.ClientData.WaBaoGoodsData.Quality, client.ClientData.WaBaoGoodsData.Props, client.ClientData.WaBaoGoodsData.Forge_level, client.ClientData.WaBaoGoodsData.Binding, client.ClientData.WaBaoGoodsData.Site, client.ClientData.WaBaoGoodsData.Jewellist, true, 1, "挖宝获取道具", "1900-01-01 12:00:00", client.ClientData.WaBaoGoodsData.AddPropIndex, client.ClientData.WaBaoGoodsData.BornIndex, client.ClientData.WaBaoGoodsData.Lucky, client.ClientData.WaBaoGoodsData.Strong, 0, 0, 0, null, null, 0, true);
                if (dbRet < 0)
                {
                    string strcmd = string.Format("{0}:{1}", -10, client.ClientData.RoleID);
                    result = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, cmd);
                }
                else
                {
                    client.ClientData.WaBaoGoodsData = null;
                    string strcmd = string.Format("{0}:{1}", 0, client.ClientData.RoleID);
                    result = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, cmd);
                }
            }
            return(result);
        }
コード例 #20
0
ファイル: TCPManager.cs プロジェクト: chenchungit/ky
        /// <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();
                    }
                }
            }
        }
コード例 #21
0
ファイル: MarryPartyLogic.cs プロジェクト: chenchungit/ky
        public TCPProcessCmdResults ProcessMarryPartyQuery(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception) //解析错误
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID));

                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN);
                return(TCPProcessCmdResults.RESULT_DATA);
            }

            try
            {
                string[] fields = cmdData.Split(':');
                if (fields.Length != 1)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}",
                                                                      (TCPGameServerCmds)nID, fields.Length, cmdData));

                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }

                int roleID = Convert.ToInt32(fields[0]);

                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (null == client)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket)));
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }

                if (client.ClientSocket.IsKuaFuLogin)
                {
                    client.sendCmd((int)TCPGameServerCmds.CMD_SPR_MARRY_PARTY_QUERY, new Dictionary <int, MarryPartyData>());
                }
                else
                {
                    //return Global.RequestToDBServer2(tcpClientPool, pool, (int)TCPGameServerCmds.CMD_DB_MARRY_PARTY_QUERY, string.Format("{0}", GameManager.ServerLineID), out tcpOutPacket);
                    SendMarryPartyList(client, null, roleID);
                }

                return(TCPProcessCmdResults.RESULT_OK);
            }
            catch (Exception ex)
            {
                // 格式化异常错误信息
                DataHelper.WriteFormatExceptionLog(ex, "", false);
            }

            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN);
            return(TCPProcessCmdResults.RESULT_DATA);
        }
コード例 #22
0
ファイル: GameClient.cs プロジェクト: songxiaopeng/mu_server
 public void SendCmdAfterStartPlayGame(int cmdId, byte[] cmdData)
 {
     lock (this.DelayStartPlayGameMsgQueue)
     {
         TCPOutPacket tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(TCPOutPacketPool.getInstance(), cmdData, cmdId);
         this.DelayStartPlayGameMsgQueue.Enqueue(tcpOutPacket);
     }
 }
コード例 #23
0
ファイル: GameClient.cs プロジェクト: songxiaopeng/mu_server
 public void SendCmdAfterStartPlayGame <T>(int cmdId, T cmdData)
 {
     lock (this.DelayStartPlayGameMsgQueue)
     {
         TCPOutPacket tcpOutPacket = DataHelper.ObjectToTCPOutPacket <T>(cmdData, TCPOutPacketPool.getInstance(), cmdId);
         this.DelayStartPlayGameMsgQueue.Enqueue(tcpOutPacket);
     }
 }
コード例 #24
0
ファイル: TCPManager.cs プロジェクト: neyma2379294/MuOrigin
        /// <summary>
        /// 发送数据通知函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SocketSended(object sender, SocketAsyncEventArgs e)
        {
            //SocketListener sl = sender as SocketListener;
            //Socket s = (e.UserToken as AsyncUserToken).CurrentSocket;
            TCPOutPacket tcpOutPacket = (e.UserToken as AsyncUserToken).Tag as TCPOutPacket;

            tcpOutPacketPool.Push(tcpOutPacket);
        }
コード例 #25
0
        public static TCPProcessCmdResults ProcessFazhenBossCMD(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false)), null, true);
                return(TCPProcessCmdResults.RESULT_FAILED);
            }
            try
            {
                string[] fields = cmdData.Split(new char[]
                {
                    ':'
                });
                if (fields.Length != 1)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Client={1}, Recv={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), fields.Length), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                int        roleID = Convert.ToInt32(fields[0]);
                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (KuaFuManager.getInstance().ClientCmdCheckFaild(nID, client, ref roleID))
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket, false), roleID), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                if (client.ClientData.FuBenID != LuoLanFaZhenCopySceneManager.LuoLanFaZhenFubenID)
                {
                    return(TCPProcessCmdResults.RESULT_OK);
                }
                SingleLuoLanFaZhenFubenData fubenData = LuoLanFaZhenCopySceneManager.GetFubenData(client.ClientData.FuBenSeqID);
                if (null == fubenData)
                {
                    return(TCPProcessCmdResults.RESULT_OK);
                }
                string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[]
                {
                    LuoLanFaZhenCopySceneManager.LuoLanFaZhenFubenID,
                    LuoLanFaZhenCopySceneManager.FinalBossID,
                    fubenData.FinalBossLeftNum,
                    LuoLanFaZhenCopySceneManager.SpecialBossID,
                    fubenData.SpecailBossLeftNum
                });
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, 760);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "ProcessFazhenBossCMD", false, false);
            }
            return(TCPProcessCmdResults.RESULT_FAILED);
        }
コード例 #26
0
ファイル: NameManager.cs プロジェクト: qiuhoude/mu_server
        public TCPProcessCmdResults ProcessChangeName(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPRandKey tcpRandKey, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID), null, true);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            try
            {
                string[] fields = cmdData.Split(new char[]
                {
                    ':'
                });
                if (fields.Length != 3)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}", (TCPGameServerCmds)nID, fields.Length, cmdData), null, true);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                int    roleId  = Convert.ToInt32(fields[0]);
                int    zoneId  = Convert.ToInt32(fields[1]);
                string newName = fields[2];
                string uid     = GameManager.OnlineUserSession.FindUserID(socket);
                if (string.IsNullOrEmpty(uid))
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("角色改名时,找不到socket对应的uid,其中roleid={0},zoneid={1},newname={2}", roleId, zoneId, newName), null, true);
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }
                ChangeNameResult result = new ChangeNameResult();
                if (socket.IsKuaFuLogin || GameManager.ClientMgr.FindClient(socket) != null)
                {
                    result.ErrCode = 11;
                }
                else
                {
                    result.ErrCode = (int)this.HandleChangeName(uid, zoneId, roleId, newName);
                }
                result.ZoneId   = zoneId;
                result.NewName  = newName;
                result.NameInfo = this.GetChangeNameInfo(uid, zoneId, socket.ServerId);
                tcpOutPacket    = DataHelper.ObjectToTCPOutPacket <ChangeNameResult>(result, pool, nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "", false, false);
            }
            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
            return(TCPProcessCmdResults.RESULT_DATA);
        }
コード例 #27
0
ファイル: QingGongYanManager.cs プロジェクト: chenchungit/ky
        /// <summary>
        /// 申请举办
        /// </summary>
        public TCPProcessCmdResults ProcessHoldQingGongYanCMD(TCPManager tcpMgr, TMSKSocket socket, TCPClientPool tcpClientPool, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception) //解析错误
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}, Client={1}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket)));
                return(TCPProcessCmdResults.RESULT_FAILED);
            }

            try
            {
                string[] fields = cmdData.Split(':');
                if (fields.Length != 3)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Client={1}, Recv={2}",
                                                                      (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket), fields.Length));
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }

                int        roleID    = Convert.ToInt32(fields[0]);
                int        Index     = Convert.ToInt32(fields[1]);
                int        OnlyCheck = Convert.ToInt32(fields[2]);
                GameClient client    = GameManager.ClientMgr.FindClient(socket);
                if (null == client || client.ClientData.RoleID != roleID)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}", (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket), roleID));
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }

                QingGongYanResult result = HoldQingGongYan(client, Index, OnlyCheck);
                string            strcmd = "";

                if (result != QingGongYanResult.Success)
                {
                    strcmd       = string.Format("{0}:{1}:{2}", (int)result, roleID, OnlyCheck);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }

                strcmd       = string.Format("{0}:{1}:{2}", (int)QingGongYanResult.Success, roleID, OnlyCheck);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }

            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "ProcessHoldQingGongYanCMD", false);
            }


            return(TCPProcessCmdResults.RESULT_FAILED);
        }
コード例 #28
0
        /// <summary>
        /// 重置世界等级
        /// </summary>
        public void ResetWorldLevel()
        {
            int dayID = TimeUtil.NowDateTime().DayOfYear;

            if (m_nResetWorldLevelDayID == dayID)
            {
                return;
            }

            TCPOutPacket         tcpOutPacket    = null;
            string               strcmd          = string.Format("{0}:{1}", 0, (int)PaiHangTypes.RoleLevel);
            TCPProcessCmdResults dbRequestResult = Global.RequestToDBServer2(Global._TCPManager.tcpClientPool, TCPOutPacketPool.getInstance(), (int)TCPGameServerCmds.CMD_SPR_GETPAIHANGLIST, strcmd, out tcpOutPacket, GameManager.LocalServerId);

            if (dbRequestResult == TCPProcessCmdResults.RESULT_FAILED)
            {
                LogManager.WriteLog(LogTypes.Error, "世界等级装入异常");
                return;
            }

            int nBakResetWorldLevelDayID = m_nResetWorldLevelDayID;

            m_nResetWorldLevelDayID = dayID;

            // 处理本地精简的好友列表数据
            PaiHangData paiHangData = DataHelper.BytesToObject <PaiHangData>(tcpOutPacket.GetPacketBytes(), 6, tcpOutPacket.PacketDataSize - 6);

            if (null != paiHangData)
            {
                int nLevelCount = 0;
                if (null != paiHangData.PaiHangList)
                {
                    for (int i = 0; i < 10 && i < paiHangData.PaiHangList.Count; i++)
                    {
                        nLevelCount += paiHangData.PaiHangList[i].Val2 * 100 + paiHangData.PaiHangList[i].Val1;
                    }
                }
                m_nWorldLevel = nLevelCount / 10;
            }
            else
            {
                LogManager.WriteLog(LogTypes.Error, "世界等级装入时,获取等级排行榜失败");
                return;
            }


            if (0 != nBakResetWorldLevelDayID)
            {
                int count = GameManager.ClientMgr.GetMaxClientCount();
                for (int i = 0; i < count; i++)
                {
                    GameClient client = GameManager.ClientMgr.FindClientByNid(i);
                    if (null != client)
                    {
                        UpddateWorldLevelBuff(client);
                    }
                }
            }
        }
コード例 #29
0
        /// <summary>
        /// 新区充值返利领取
        /// </summary>
        /// <param name="dbMgr"></param>
        /// <param name="pool"></param>
        /// <param name="nID"></param>
        /// <param name="data"></param>
        /// <param name="count"></param>
        /// <param name="tcpOutPacket"></param>
        /// <returns></returns>
        private static TCPProcessCmdResults GetNewFanliAward(DBManager dbMgr, TCPOutPacketPool pool, int nID, int roleID, int activeid, string fromDate, string todate, List <int> minGateValueList, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;
            string strcmd  = "";

            try
            {
                DBRoleInfo roleInfo = dbMgr.GetDBRoleInfo(roleID);

                if (null == roleInfo)
                {
                    strcmd       = string.Format("{0}:{1}:{2}", -1001, roleID, activeid);
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }

                int roleYuanBaoInPeriod = NewZoneActiveMgr.ComputTotalFanliValue(dbMgr, roleInfo, activeid, fromDate, todate, minGateValueList);


                DBUserInfo userInfo = dbMgr.GetDBUserInfo(roleInfo.UserID);

                //避免同一用户账号同时多次操作
                lock (userInfo)
                {
                    if (roleYuanBaoInPeriod > 0)
                    {
                        //活动时间取前一天的
                        DateTime sub1DayDateTime = Global.GetAddDaysDataTime(DateTime.Now, -1, true);

                        DateTime startTime     = new DateTime(sub1DayDateTime.Year, sub1DayDateTime.Month, sub1DayDateTime.Day, 0, 0, 0);
                        DateTime endTime       = new DateTime(sub1DayDateTime.Year, sub1DayDateTime.Month, sub1DayDateTime.Day, 23, 59, 59);
                        string   huoDongKeyStr = Global.GetHuoDongKeyString(startTime.ToString("yyyy-MM-dd HH:mm:ss"), endTime.ToString("yyyy-MM-dd HH:mm:ss"));
                        //更新已领取状态
                        int ret = DBWriter.AddHongDongAwardRecordForUser(dbMgr, roleInfo.UserID, (int)(ActivityTypes.NewZoneFanli), huoDongKeyStr, 1, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                        if (ret < 0)
                        {
                            strcmd       = string.Format("{0}:{1}:{2}", -1008, roleID, activeid);
                            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                            return(TCPProcessCmdResults.RESULT_DATA);
                        }
                    }
                }

                strcmd = string.Format("{0}:{1}:{2}", 1, roleYuanBaoInPeriod, activeid);

                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "", false);
            }

            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_DB_ERR_RETURN);
            return(TCPProcessCmdResults.RESULT_DATA);
        }
コード例 #30
0
ファイル: VideoLogic.cs プロジェクト: chenchungit/ky
        /// <summary>
        /// 获取视频聊天室相关数据
        /// </summary>
        /// <param name="socket"></param>
        /// <param name="pool"></param>
        /// <param name="nID"></param>
        /// <param name="tcpOutPacket"></param>
        /// <returns></returns>
        public static TCPProcessCmdResults ProcessOpenVideoCmd(TMSKSocket socket, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData = null;

            try
            {
                cmdData = new UTF8Encoding().GetString(data, 0, count);
            }
            catch (Exception) //解析错误
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("解析指令字符串错误, CMD={0}", (TCPGameServerCmds)nID));

                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_SPR_VIDEO_OPEN);
                return(TCPProcessCmdResults.RESULT_DATA);
            }

            try
            {
                string[] fields = cmdData.Split(':');
                if (fields.Length != 1)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("指令参数个数错误, CMD={0}, Recv={1}, CmdData={2}",
                                                                      (TCPGameServerCmds)nID, fields.Length, cmdData));

                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", (int)TCPGameServerCmds.CMD_SPR_VIDEO_OPEN);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }

                int roleID = Convert.ToInt32(fields[0]);

                GameClient client = GameManager.ClientMgr.FindClient(socket);
                if (null == client || client.ClientData.RoleID != roleID)
                {
                    LogManager.WriteLog(LogTypes.Error, string.Format("根据RoleID定位GameClient对象失败, CMD={0}, Client={1}, RoleID={2}",
                                                                      (TCPGameServerCmds)nID, Global.GetSocketRemoteEndPoint(socket), roleID));
                    return(TCPProcessCmdResults.RESULT_FAILED);
                }

                VideoData roomData = GetVideoRoomData(client);
                if (roomData == null)
                {
                    tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "", nID);
                    return(TCPProcessCmdResults.RESULT_DATA);
                }
                var filterStatus = GetPlayerFilterStatus(client, roomData);

                string strcmd = string.Format("{0}:{1}:{2}", roomData.TalkID, roomData.PassWord, filterStatus);
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(socket), false);
            }

            return(TCPProcessCmdResults.RESULT_DATA);
        }