private int ChangeRoleState(HuanYingSiYuanAgent huanYingSiYuanAgent, KuaFuRoleData kuaFuRoleData, KuaFuRoleStates state) { int result = -1; try { IKuaFuClient kuaFuClient = null; KuaFuRoleData roleData = null; int oldGameId = 0; lock (kuaFuRoleData) { kuaFuRoleData.Age++; kuaFuRoleData.State = state; if (state == KuaFuRoleStates.None && kuaFuRoleData.GameId > 0) { oldGameId = kuaFuRoleData.GameId; } kuaFuClient = huanYingSiYuanAgent.KuaFuClient; roleData = (KuaFuRoleData)kuaFuRoleData; } if (oldGameId > 0) { RemoveRoleFromFuBen(oldGameId, kuaFuRoleData.RoleId); } if (null != kuaFuClient && null != roleData) { result = huanYingSiYuanAgent.NotifyChangeState(kuaFuRoleData); } } catch (System.Exception ex) { return(-1); } return(result); }
private void CheckRoleTimerProc(DateTime now, ServerLoadContext context) { context.SignUpRoleCount = 0; context.StartGameRoleCount = 0; bool assgionGameFuBen = true; long maxRemoveRoleTicks = now.AddHours(-2).Ticks; long waitTicks1 = now.AddSeconds(-Persistence.SignUpWaitSecs1).Ticks; long waitTicks2 = now.AddSeconds(-Persistence.SignUpWaitSecs2).Ticks; foreach (var kuaFuRoleData in RoleIdKuaFuRoleDataDict.Values) { int oldGameId = 0; lock (kuaFuRoleData) { //清理超时角色 if (kuaFuRoleData.State == KuaFuRoleStates.None || kuaFuRoleData.State > KuaFuRoleStates.StartGame) { if (kuaFuRoleData.StateEndTicks < maxRemoveRoleTicks) { KuaFuRoleData kuaFuRoleDataTemp; RoleIdKuaFuRoleDataDict.TryRemove(KuaFuRoleKey.Get(kuaFuRoleData.ServerId, kuaFuRoleData.RoleId), out kuaFuRoleDataTemp); continue; } } else if (kuaFuRoleData.State == KuaFuRoleStates.NotifyEnterGame || kuaFuRoleData.State == KuaFuRoleStates.EnterGame) { if (kuaFuRoleData.StateEndTicks < now.Ticks) { kuaFuRoleData.Age++; kuaFuRoleData.State = KuaFuRoleStates.None; oldGameId = kuaFuRoleData.GameId; } } } if (kuaFuRoleData.State == KuaFuRoleStates.SignUp) { context.SignUpRoleCount++; if (assgionGameFuBen) { assgionGameFuBen = AssignGameFuben(kuaFuRoleData, context, waitTicks1, waitTicks2, now); } } else if (kuaFuRoleData.State == KuaFuRoleStates.SignUpWaiting) { context.SignUpRoleCount++; } else if (kuaFuRoleData.State == KuaFuRoleStates.StartGame) { context.StartGameRoleCount++; } if (oldGameId > 0) { RemoveRoleFromFuBen(oldGameId, kuaFuRoleData.RoleId); HuanYingSiYuanAgent huanYingSiYuanAgent = GetKuaFuAgent(kuaFuRoleData.ServerId); if (null != huanYingSiYuanAgent) { huanYingSiYuanAgent.NotifyChangeState(kuaFuRoleData); } } } }