//数据变化 public void PushDataChange(FriendManager _this, ulong uId, CharacterSimpleData info) { var isFind = false; var f = GetFriend(_this, uId); if (f != null) { f.PushInfoData(info); isFind = true; } f = GetEnemy(_this, uId); if (f != null) { f.PushInfoData(info); isFind = true; } f = GetShield(_this, uId); if (f != null) { f.PushInfoData(info); isFind = true; } if (isFind) { _this.Changes.Characters.Add(info); if (_this.ChangesTrigger == null) { _this.ChangesTrigger = LogicServerControl.Timer.CreateTrigger(DateTime.Now.AddSeconds(3), () => { SendChanges(_this); }); } } }
//通知某个队员,进行了某个排队 private void SendTeamMemberMatch(CharacterSimpleData data, QueueCharacter character) { TeamCharacterProxy toCharacterProxy; if (TeamServer.Instance.ServerControl.Proxys.TryGetValue(data.Id, out toCharacterProxy)) { var info = new QueueInfo(); info.QueueId = character.mLogic.mQueueId; info.NeedSeconds = character.mLogic.GetAverageTime(); info.StartTime = character.StartTime.ToBinary(); var ChattoCharacterProxy = toCharacterProxy as TeamProxy; ChattoCharacterProxy.NotifyMatchingData(info); } }
public void PushSimpleData(FriendData _this, SceneSimpleData result, bool isOnline) { var temp = new CharacterSimpleData { Id = result.Id, TypeId = result.TypeId, Name = result.Name, SceneId = result.SceneId, FightPoint = result.FightPoint, Level = result.Level, Ladder = result.Ladder, ServerId = result.ServerId }; if (isOnline) { temp.Online = 1; } else { temp.Online = 0; } _this.InfoData = temp; }
//把一个新的characterId 加入到 character 里 private IEnumerator PushOneCharacterCoroutine(Coroutine co, ulong characterId, QueueCharacter character) { if (character.result != null) { yield break; } PlayerLog.WriteLog((int)LogType.QueueMessage, "PushOnCharacter character={0}", characterId); //在线检查 if (!TeamServer.Instance.ServerControl.Proxys.ContainsKey(characterId)) { Logger.Error("PushOneCharacterCoroutine(), character {0} not online", characterId); yield break; } //检查进入条件 if (QueueManager.Characters.ContainsKey(characterId)) { Logger.Error("PushOneCharacterCoroutine(), character {0} already in queue", characterId); yield break; } //确定玩家的进入条件满足 var tbQueue = character.mLogic.tbQueue; var logicResult = TeamServer.Instance.LogicAgent.CheckCharacterInFuben(characterId, tbQueue.Param); yield return(logicResult.SendAndWaitUntilDone(co)); if (logicResult.State != MessageState.Reply) { Logger.Error( "PushOneCharacterCoroutine(), CheckCharacterInFuben not replied! character = {0},fubenid = {1}", characterId, tbQueue.Id); yield break; } if (logicResult.ErrorCode != (int)ErrorCodes.OK) { Logger.Debug("PushOneCharacterCoroutine(), character {0} already in queue", characterId); yield break; } //从scene获取simpledata var dbSceneSimple = TeamServer.Instance.SceneAgent.GetSceneSimpleData(characterId, 0); yield return(dbSceneSimple.SendAndWaitUntilDone(co)); if (dbSceneSimple.State != MessageState.Reply) { Logger.Error("PushOnCharacter Error! GetSceneSimpleData not replied! Id = {0}", characterId); yield break; } if (dbSceneSimple.ErrorCode != (int)ErrorCodes.OK) { Logger.Error("PushOnCharacter Error! GetSceneSimpleData return with err = {0}", dbSceneSimple.ErrorCode); yield break; } var data = new CharacterSimpleData { Id = dbSceneSimple.Response.Id, TypeId = dbSceneSimple.Response.TypeId, Name = dbSceneSimple.Response.Name, SceneId = dbSceneSimple.Response.SceneId, FightPoint = dbSceneSimple.Response.FightPoint, Level = dbSceneSimple.Response.Level, Ladder = dbSceneSimple.Response.Ladder, ServerId = dbSceneSimple.Response.ServerId }; if (character.result != null) { yield break; } character.mDatas.Add(data); SendTeamMemberMatch(data, character); #if DEBUG PlayerLog.WriteLog((int)LogType.QueueMessage, "PushOneCharacterCoroutine().Matching Add c={0}, ids={1}", character.Guid, character.mDatas.Select(d => d.Id).GetDataString()); #endif QueueManager.Characters.Add(characterId, character); }
public void SyncAddFriend(int type, CharacterSimpleData character) { var e = new FriendAddSyncEvent(type, character); EventDispatcher.Instance.DispatchEvent(e); }
public void PushInfoData(CharacterSimpleData info) { mImpl.PushInfoData(this, info); }
//数据变化 public void PushDataChange(ulong uId, CharacterSimpleData info) { mImpl.PushDataChange(this, uId, info); }
public void PushInfoData(FriendData _this, CharacterSimpleData info) { _this.InfoData = info; }
//重新组织新队长 private void ResetNewLeader(QueueResultBase _this) { foreach (var list in _this.mTeamList) { //筛选队长 CharacterSimpleData LeaderCharacter = null; var maxCount = 0; var FightPoint = 0; foreach (var qCharacters in list) { foreach (var matchingCharacter in qCharacters.mDatas) { var character = TeamManager.GetCharacterTeam(matchingCharacter.Id); if (character != null) { if (character.TeamState == TeamState.Leader) { if (character.team.GetTeamCount() > maxCount) { maxCount = character.team.GetTeamCount(); LeaderCharacter = matchingCharacter; FightPoint = matchingCharacter.FightPoint; } else if (character.team.GetTeamCount() == maxCount) { if (matchingCharacter.FightPoint > FightPoint) { FightPoint = matchingCharacter.FightPoint; LeaderCharacter = matchingCharacter; } } //character.team.Disband(); } } else { if (matchingCharacter.FightPoint > FightPoint && LeaderCharacter == null) { FightPoint = matchingCharacter.FightPoint; LeaderCharacter = matchingCharacter; } } } } if (LeaderCharacter == null) { return; } //组队 var tempTeam = QueueTeamManager.CreateTeam(_this.mQueue.mQueueId); _this.newTeams.Add(tempTeam); tempTeam.PushCharacter(LeaderCharacter.Id); foreach (var qCharacters in list) { qCharacters.team = tempTeam; foreach (var matchingCharacter in qCharacters.mDatas) { if (LeaderCharacter != matchingCharacter) { tempTeam.PushCharacter(matchingCharacter.Id); } } } } }