public void processCmd(GameServerClient client, byte[] cmdParams, int count)
        {
            string cmd = new UTF8Encoding().GetString(cmdParams, 0, count);

            string[] param = cmd.Split(':');

            ZhanMengShiJianData data = new ZhanMengShiJianData();

            data.BHID        = Convert.ToInt32(param[0]);
            data.RoleName    = Convert.ToString(param[1]);
            data.ShiJianType = Convert.ToInt32(param[2]);
            data.SubValue1   = Convert.ToInt32(param[3]);
            data.SubValue2   = Convert.ToInt32(param[4]);
            data.SubValue3   = Convert.ToInt32(param[5]);
            data.CreateTime  = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            //需要特殊处理的战盟事件类型: 职务改变
            if (data.ShiJianType == ZhanMengShiJianConstants.ChangeZhiWu)
            {
                string otherRoleName;
                string otherUserID;
                Global.GetRoleNameAndUserID(DBManager.getInstance(), data.SubValue3, out otherRoleName, out otherUserID);
                data.RoleName = otherRoleName;
            }

            ZhanMengShiJianManager.getInstance().onAddZhanMengShiJian(data);

            byte[] arrSendData = DataHelper.ObjectToBytes <string>(string.Format("{0}", 1));
            client.sendCmd((int)TCPGameServerCmds.CMD_DB_ADD_ZHANMENGSHIJIAN, arrSendData);
        }
        /// <summary>
        /// 战盟事件触发处理
        /// </summary>
        /// <param name="bhId"></param>
        /// <param name="roleName"></param>
        /// <param name="shijianType"></param>
        /// <param name="param1"></param>
        /// <param name="param2"></param>
        /// <param name="param3"></param>
        public void onAddZhanMengShiJian(ZhanMengShiJianData data)
        {
            List <ZhanMengShiJianData> _dataList = null;

            lock (dataCache)
            {
                if (!dataCache.TryGetValue(data.BHID, out _dataList))
                {
                    _dataList = new List <ZhanMengShiJianData>();
                    dataCache.Add(data.BHID, _dataList);
                }
            }

            lock (_dataList)
            {
                //将最新的数据插入到最前面
                _dataList.Insert(0, data);

                //超过规定容量,删除最后一个
                if (_dataList.Count > MaxCacheNum)
                {
                    _dataList.RemoveAt(_dataList.Count - 1);
                }
            }

            ZhanMengShiJianDBController.getInstance().insert(data);
        }
        public void onAddZhanMengShiJian(ZhanMengShiJianData data)
        {
            List <ZhanMengShiJianData> _dataList = null;

            lock (this.dataCache)
            {
                if (!this.dataCache.TryGetValue(data.BHID, out _dataList))
                {
                    _dataList = new List <ZhanMengShiJianData>();
                    this.dataCache.Add(data.BHID, _dataList);
                }
            }
            lock (_dataList)
            {
                _dataList.Insert(0, data);
                if (_dataList.Count > ZhanMengShiJianConstants.MaxCacheNum)
                {
                    _dataList.RemoveAt(_dataList.Count - 1);
                }
            }
            ZhanMengShiJianDBController.getInstance().insert(data);
        }
Exemple #4
0
        public TCPProcessCmdResults ProcChangeBangHuiName(DBManager dbMgr, TCPOutPacketPool pool, int nID, byte[] data, int count, out TCPOutPacket tcpOutPacket)
        {
            tcpOutPacket = null;
            string cmdData   = null;
            string bhOldName = "";

            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    factionId               = Convert.ToInt32(fields[1]);
                string newName                 = fields[2];
                EChangeGuildNameError ne       = EChangeGuildNameError.DBFailed;
                DBRoleInfo            roleInfo = dbMgr.GetDBRoleInfo(ref roleId);
                if (null == roleInfo)
                {
                    ne = EChangeGuildNameError.DBFailed;
                }
                else
                {
                    lock (roleInfo)
                    {
                        if (roleInfo.Faction != factionId || roleInfo.BHZhiWu != 1)
                        {
                            ne = EChangeGuildNameError.OperatorDenied;
                            goto IL_381;
                        }
                    }
                    if (!this.IsNameCanUseInDb(dbMgr, newName))
                    {
                        ne = EChangeGuildNameError.InvalidName;
                    }
                    else
                    {
                        BangHuiDetailData detail = DBQuery.QueryBangHuiInfoByID(dbMgr, factionId);
                        if (detail == null || detail.CanModNameTimes <= 0 || detail.BZRoleID != roleId)
                        {
                            ne = EChangeGuildNameError.OperatorDenied;
                        }
                        else
                        {
                            bhOldName = detail.BHName;
                            SingletonTemplate <NameUsedMgr> .Instance().AddCannotUse_BangHui_Ex(detail.BHName);

                            if (!SingletonTemplate <NameUsedMgr> .Instance().AddCannotUse_BangHui_Ex(newName) || dbMgr.IsBangHuiNameExist(newName))
                            {
                                ne = EChangeGuildNameError.NameAlreadyUsed;
                            }
                            else
                            {
                                string sql = string.Format("UPDATE t_banghui SET bhname='{0}', can_mod_name_times={1} WHERE bhid={2}", newName, detail.CanModNameTimes - 1, factionId);
                                if (!this._Util_ExecNonQuery(dbMgr, sql))
                                {
                                    ne = EChangeGuildNameError.DBFailed;
                                }
                                else
                                {
                                    lock (roleInfo)
                                    {
                                        roleInfo.BHName = newName;
                                    }
                                    if (!DBWriter.UpdateAllRoleBangHuiName(dbMgr, factionId, newName))
                                    {
                                        LogManager.WriteLog(LogTypes.Error, string.Format("更新帮会id={0}的名字 {1} => {2},更新t_roles未(全部)成功", factionId, detail.BHName, newName), null, true);
                                    }
                                    List <DBRoleInfo> dbRoleInfoList = dbMgr.DBRoleMgr.GetCachingDBRoleInfoListByFaction(factionId);
                                    if (null != dbRoleInfoList)
                                    {
                                        for (int i = 0; i < dbRoleInfoList.Count; i++)
                                        {
                                            dbRoleInfoList[i].BHName = newName;
                                        }
                                    }
                                    ZhanMengShiJianData eventData = new ZhanMengShiJianData();
                                    eventData.BHID        = factionId;
                                    eventData.ShiJianType = ZhanMengShiJianConstants.ChangeName;
                                    eventData.RoleName    = roleInfo.RoleName;
                                    eventData.SubSzValue1 = newName;
                                    eventData.CreateTime  = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                                    ZhanMengShiJianManager.getInstance().onAddZhanMengShiJian(eventData);
                                    string recordSql = string.Format("INSERT INTO t_change_name_banghui(bhid,by_role,old_name,new_name,time) VALUES({0},{1},'{2}','{3}','{4}')", new object[]
                                    {
                                        factionId,
                                        roleId,
                                        bhOldName,
                                        newName,
                                        DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
                                    });
                                    this._Util_ExecNonQuery(dbMgr, recordSql);
                                    ne = EChangeGuildNameError.Success;
                                }
                            }
                        }
                    }
                }
IL_381:
                if (ne == EChangeGuildNameError.Success)
                {
                    GameDBManager.BangHuiLingDiMgr.OnChangeBangHuiName(factionId, bhOldName, newName);
                    string gmCmdData = string.Format("-synclingdi", new object[0]);
                    ChatMsgManager.AddGMCmdChatMsg(-1, gmCmdData);
                }
                tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, string.Format("{0}", (int)ne), nID);
                return(TCPProcessCmdResults.RESULT_DATA);
            }
            catch (Exception ex)
            {
                DataHelper.WriteFormatExceptionLog(ex, "", false, false);
            }
            tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, "0", 30767);
            return(TCPProcessCmdResults.RESULT_DATA);
        }