コード例 #1
0
ファイル: AllyPersistence.cs プロジェクト: chenchungit/ky
        public bool DBUnionDataUpdate(KFAllyData data)
        {
            string sql = string.Format(@"REPLACE INTO t_ally_union(unionID,unionZoneID,unionName,unionLevel,unionNum,leaderID,leaderZoneID,leaderName,logTime,serverID) 
                                        VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}')",
                                       data.UnionID, data.UnionZoneID, data.UnionName, data.UnionLevel, data.UnionNum,
                                       data.LeaderID, data.LeaderZoneID, data.LeaderName,
                                       data.LogTime, data.ServerID);

            int i = ExecuteSqlNoQuery(sql);

            return(i > 0);
        }
コード例 #2
0
ファイル: AllyService.cs プロジェクト: chenchungit/ky
        //Refuse
        public int OperateRefuse(int serverID, int unionID, int targetID, bool isDel = false)
        {
            lock (_Mutex)
            {
                KFAllyData targetData = GetUnionData(targetID);
                if (targetData == null) return (int)EAlly.ENoTargetUnion;

                if (!UnionIsAccept(unionID, targetID)) return (int)EAlly.EFail;
                if (!UnionIsRequest(targetID, unionID)) return (int)EAlly.EFail;

                bool isDelResult = AllyPersistence.Instance.DBAllyRequestDel(targetID, unionID);
                if (!isDelResult) return (int)EAlly.EFail;

                DateTime logTime = DateTime.Now;
                int logState = (int)EAlly.AllyRefuse;

                //my
                KFAllyData rData = GetAcceptData(unionID, targetID);
                if (!isDel) _acceptDic[unionID].Remove(rData);
                ClientAgentManager.Instance().PostAsyncEvent(serverID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyAcceptRemove, unionID, targetID));

                //target
                if (_requestDic.ContainsKey(targetID))
                {
                    KFAllyData aData = GetRequestData(targetID, unionID);
                    _requestDic[targetID].Remove(aData);
                }

                KFAllyData myData = GetUnionData(unionID);
                AllyLogData logData = new AllyLogData();
                logData.UnionID = myData.UnionID;
                logData.UnionZoneID = myData.UnionZoneID;
                logData.UnionName = myData.UnionName;
                logData.MyUnionID = targetID;
                logData.LogTime = logTime;
                logData.LogState = (int)EAlly.AllyRefuseOther;

                if (IsAgent(targetData.ServerID))
                {
                    ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyRequestRemove, targetID, unionID));
                    ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyLog, targetID, new List<AllyLogData>() { logData }));
                }
                else
                {
                    AllyPersistence.Instance.DBAllyLogAdd(logData);
                }

                return (int)EAlly.AllyRefuse;
            }
        }
コード例 #3
0
ファイル: AllyService.cs プロジェクト: chenchungit/ky
        private KFAllyData GetUnionData(int unionID)
        {
            lock (_Mutex)
            {
                KFAllyData data = null;
                if (!_unionDic.TryGetValue(unionID, out data))
                {
                    data = AllyPersistence.Instance.DBUnionDataGet(unionID);

                    if (data != null) _unionDic.TryAdd(unionID, data);
                }

                return data;
            }
        }
コード例 #4
0
ファイル: AllyService.cs プロジェクト: chenchungit/ky
        private KFAllyData GetUnionData(int unionZoneID, string unionName)
        {
            lock (_Mutex)
            {
                KFAllyData resultData = null;

                var data = from item in _unionDic.Values
                           where item.UnionZoneID == unionZoneID && item.UnionName == unionName
                           select item;

                if (data.Any())
                {
                    resultData = data.First<KFAllyData>();
                }
                else
                {
                    resultData = AllyPersistence.Instance.DBUnionDataGet(unionZoneID, unionName);
                    if (resultData != null) _unionDic.TryAdd(resultData.UnionID, resultData);
                }

                return resultData;
            }
        }
コード例 #5
0
ファイル: AllyPersistence.cs プロジェクト: chenchungit/ky
        public KFAllyData DBUnionDataGet(int unionZoneID, string unionName)
        {
            KFAllyData item = null;

            try
            {
                string strSql = string.Format(@"SELECT unionID,unionZoneID,unionName,unionLevel,unionNum,leaderID,leaderZoneID,leaderName,logTime,serverID
                                                FROM t_ally_union
                                                WHERE unionZoneID='{0}' and unionName='{1}'", unionZoneID, unionName);
                var    sdr    = DbHelperMySQL.ExecuteReader(strSql);
                while (sdr != null && sdr.Read())
                {
                    item              = new KFAllyData();
                    item.UnionID      = (int)Convert.ToInt32(sdr["unionID"]);
                    item.UnionZoneID  = (int)Convert.ToInt32(sdr["unionZoneID"]);
                    item.UnionName    = sdr["unionName"].ToString();
                    item.UnionLevel   = (int)Convert.ToInt32(sdr["unionLevel"]);
                    item.UnionNum     = (int)Convert.ToInt32(sdr["unionNum"]);
                    item.LeaderID     = (int)Convert.ToInt32(sdr["leaderID"]);
                    item.LeaderZoneID = (int)Convert.ToInt32(sdr["leaderZoneID"]);
                    item.LeaderName   = sdr["leaderName"].ToString();
                    item.LogTime      = Convert.ToDateTime(sdr["logTime"]);
                    item.ServerID     = (int)Convert.ToInt32(sdr["serverID"]);
                }

                if (sdr != null)
                {
                    sdr.Close();
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteExceptionUseCache(ex.ToString());
            }

            return(item);
        }
コード例 #6
0
ファイル: AllyService.cs プロジェクト: chenchungit/ky
        //Agree
        public int OperateAgree(int serverID, int unionID, int targetID)
        {
            lock (_Mutex)
            {
                KFAllyData targetData = GetUnionData(targetID);
                if (targetData == null) return (int)EAlly.ENoTargetUnion;

                if (!UnionIsAccept(unionID, targetID)) return (int)EAlly.EFail;
                if (!UnionIsRequest(targetID, unionID)) return (int)EAlly.EFail;

                //num
                int sum = _allyDic[unionID].Count + _requestDic[unionID].Count;
                if (sum >= Consts.AllyNumMax) return (int)EAlly.EAllyMax;

                DateTime logTime = DateTime.Now;
                int logState = (int)EAlly.AllyAgree;

                bool isDB = AllyPersistence.Instance.DBAllyRequestDel(targetID, unionID);
                if (!isDB) return (int)EAlly.EFail;

                isDB = AllyPersistence.Instance.DBAllyAdd(unionID, targetID, logTime);
                if (!isDB) return (int)EAlly.EFail;

                //my
                KFAllyData aData = GetAcceptData(unionID, targetID);
                _acceptDic[unionID].Remove(aData);
                ClientAgentManager.Instance().PostAsyncEvent(serverID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyAcceptRemove, unionID, targetID));

                _allyDic[unionID].Add(targetID);
                aData.LogTime = logTime;
                aData.LogState = logState;

                AllyData clientMy = new AllyData();
                clientMy.Copy(aData);
                ClientAgentManager.Instance().PostAsyncEvent(serverID, _gameType, new AsyncDataItem(KuaFuEventTypes.Ally, unionID, clientMy, false));

                //target
                if (_requestDic.ContainsKey(targetID))
                {
                    KFAllyData rData = GetRequestData(targetID, unionID);
                    _requestDic[targetID].Remove(rData);
                }

                if (_allyDic.ContainsKey(targetID)) _allyDic[targetID].Add(unionID);

                KFAllyData myData = GetUnionData(unionID);
                myData.LogTime = logTime;
                myData.LogState = logState;

                AllyLogData logData = new AllyLogData();
                logData.UnionID = myData.UnionID;
                logData.UnionZoneID = myData.UnionZoneID;
                logData.UnionName = myData.UnionName;
                logData.MyUnionID = targetID;
                logData.LogTime = logTime;
                logData.LogState = (int)EAlly.AllyAgreeOther;

                AllyData clientTarget = new AllyData();
                clientTarget.Copy(myData);

                if (IsAgent(targetData.ServerID))
                {                             
                    ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.Ally, targetID, clientTarget, true));
                    ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyRequestRemove, targetID, unionID));
                    ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyLog, targetID, new List<AllyLogData>() { logData }));
                }
                else
                {
                    AllyPersistence.Instance.DBAllyLogAdd(logData);
                }

                ClientAgentManager.Instance().KFBroadCastAsyncEvent(_gameType, new AsyncDataItem(KuaFuEventTypes.KFAlly, clientMy, clientTarget));
                return (int)EAlly.AllyAgree;
            }
        }
コード例 #7
0
ファイル: AllyService.cs プロジェクト: chenchungit/ky
        public AllyData AllyRequest(int serverID, int unionID, int zoneID, string unionName)
        {
            lock (_Mutex)
            {
                AllyData clientRequest = new AllyData();
                if (!IsAgent(serverID))
                {
                    clientRequest.LogState = (int)EAlly.EServer;
                    return clientRequest;
                }

                KFAllyData targetData = GetUnionData(zoneID, unionName);
                if (targetData == null)
                {
                    clientRequest.LogState = (int)EAlly.EName;
                    return clientRequest;
                }

                InitAllyIDList(targetData.UnionID);
                InitAllyRequestList(targetData.UnionID);
                InitAllyAcceptList(targetData.UnionID);

                if (UnionIsAlly(unionID, targetData.UnionID))
                {
                    clientRequest.LogState = (int)EAlly.EIsAlly;
                    return clientRequest;
                }

                if (UnionIsRequest(unionID, targetData.UnionID) || UnionIsAccept(targetData.UnionID, unionID))
                {
                    clientRequest.LogState = (int)EAlly.EMore;
                    return clientRequest;
                }

                int sum = _allyDic[unionID].Count + _requestDic[unionID].Count;
                if (sum >= Consts.AllyNumMax)
                {
                    clientRequest.LogState = (int)EAlly.EAllyMax;
                    return clientRequest;
                }

                DateTime logTime = DateTime.Now;
                int logState = (int)EAlly.AllyRequestSucc;
                bool isAdd = AllyPersistence.Instance.DBAllyRequestAdd(unionID, targetData.UnionID, logTime, logState);
                if (!isAdd)
                {
                    clientRequest.LogState = (int)EAlly.EAllyRequest;
                    return clientRequest;
                }
                //my
                KFAllyData myData = GetUnionData(unionID);

                AllyLogData logData = new AllyLogData();
                logData.UnionID = targetData.UnionID;
                logData.UnionZoneID = targetData.UnionZoneID;
                logData.UnionName = targetData.UnionName;
                logData.MyUnionID = unionID;
                logData.LogTime = logTime;
                logData.LogState = logState;
                ClientAgentManager.Instance().PostAsyncEvent(serverID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyLog, unionID, new List<AllyLogData>() { logData }));


                KFAllyData requestData = new KFAllyData();
                requestData.Copy(targetData);
                requestData.LogState = logState;
                requestData.LogTime = logTime;
                requestData.UpdateLogtime();

                AllyRequestAdd(unionID, requestData);

                clientRequest.Copy(requestData);
                // ClientAgentManager.Instance().PostAsyncEvent(serverID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyRequest, unionID, clientRequest));

                //target
                KFAllyData acceptData = new KFAllyData();
                acceptData.Copy(myData);
                acceptData.LogState = logState;
                acceptData.LogTime = logTime;
                AllyAcceptAdd(targetData.UnionID, acceptData);

                if (IsAgent(targetData.ServerID))
                {
                    AllyData clientAccept = new AllyData();
                    clientAccept.Copy(acceptData);
                    ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyAccept, targetData.UnionID, clientAccept));
                }

                return clientRequest;
            }
        }
コード例 #8
0
ファイル: AllyService.cs プロジェクト: chenchungit/ky
        public int UnionDataChange(int serverID, AllyData newData)
        {
            if (!IsAgent(serverID)) return (int)EAlly.EServer;

            lock (_Mutex)
            {
                //获取老的数据,更新状态,logtime
                KFAllyData kfData = new KFAllyData();
                kfData.Copy(newData);
                kfData.LogTime = DateTime.Now;
                kfData.ServerID = serverID;
                kfData.UpdateLogtime();

                bool result = AllyPersistence.Instance.DBUnionDataUpdate(kfData);
                if (!result) return (int)EAlly.EFail;

                KFAllyData oldData;
                if (_unionDic.TryGetValue(kfData.UnionID, out oldData))
                    _unionDic[kfData.UnionID] = kfData;
                else
                    _unionDic.TryAdd(kfData.UnionID, kfData);             

                //结盟数据
                List<int> oldAllyIDList;
                if (_allyDic.TryGetValue(kfData.UnionID, out oldAllyIDList))
                {
                    AllyData myData = new AllyData();
                    myData.Copy(kfData);
                    myData.LogState = (int)EAlly.AllyAgree;

                    foreach (int id in oldAllyIDList)
                    {
                        KFAllyData targetData = GetUnionData(id);
                        if (IsAgent(targetData.ServerID))
                            ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyUnionUpdate, targetData.UnionID, myData));
                    }
                }

                AllyData myData2 = new AllyData();
                myData2.Copy(kfData);
                myData2.LogState = (int)EAlly.AllyRequestSucc;
                //结盟请求
                List<KFAllyData> rList = null;
                if (_requestDic.TryGetValue(kfData.UnionID, out rList))
                {     
                    foreach (KFAllyData targetData in rList)
                    {
                        List<KFAllyData> raList = null;
                        if (IsAgent(targetData.ServerID) && _acceptDic.TryGetValue(targetData.UnionID, out raList))
                        {
                            KFAllyData oldAData = GetAcceptData(targetData.UnionID, kfData.UnionID);
                            if (oldAData != null)
                            {
                                raList.Remove(oldAData);
                                raList.Add(kfData);
                                ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyUnionUpdate, targetData.UnionID, myData2));
                            }
                        } 
                    }
                }

                //接受请求
                List<KFAllyData> aList = null;
                if (_acceptDic.TryGetValue(kfData.UnionID, out aList))
                {
                    foreach (KFAllyData targetData in aList)
                    {
                        List<KFAllyData> arList = null;
                        if (IsAgent(targetData.ServerID) && _requestDic.TryGetValue(targetData.UnionID, out arList))
                        {
                            KFAllyData oldRData = GetRequestData(targetData.UnionID, kfData.UnionID);
                            if (oldRData != null)
                            {
                                arList.Remove(oldRData);
                                arList.Add(kfData);
                                ClientAgentManager.Instance().PostAsyncEvent(targetData.ServerID, _gameType, new AsyncDataItem(KuaFuEventTypes.AllyUnionUpdate, targetData.UnionID, myData2));
                            }
                        }
                    }
                }

                return (int)EAlly.Succ;
            }
        }