public void CheckLogAsyncEvents(AsyncDataItem[] evList) { if (evList != null) { foreach (AsyncDataItem ev in evList) { string sql = string.Empty; try { if (ev.EventType == KuaFuEventTypes.KFCopyTeamCreate) { CopyTeamCreateData data = ev.Args[1] as CopyTeamCreateData; sql = string.Format("INSERT INTO t_kuafu_fuben_game_team(teamid,copyid,by_serverid,by_roleid,createtime) VALUES({0},{1},{2},{3},'{4}')", new object[] { data.TeamId, data.CopyId, data.Member.ServerId, data.Member.RoleID, TimeUtil.NowDateTime().ToString("yyyy-MM-dd HH:mm:ss") }); } else if (ev.EventType == KuaFuEventTypes.KFCopyTeamStart) { CopyTeamStartData data2 = ev.Args[1] as CopyTeamStartData; sql = string.Format("UPDATE t_kuafu_fuben_game_team SET starttime='{0}', kf_serverid={1} WHERE teamid={2}", TimeUtil.NowDateTime().ToString("yyyy-MM-dd HH:mm:ss"), data2.ToServerId, data2.TeamId); } else if (ev.EventType == KuaFuEventTypes.KFCopyTeamDestroty) { CopyTeamDestroyData data3 = ev.Args[0] as CopyTeamDestroyData; sql = string.Format("UPDATE t_kuafu_fuben_game_team SET endtime='{0}' WHERE teamid={1}", TimeUtil.NowDateTime().ToString("yyyy-MM-dd HH:mm:ss"), data3.TeamId); } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, "KuaFuCopyDbMgr.CheckLogAsyncEvents Failed!!!", ex, true); } if (!string.IsNullOrEmpty(sql)) { this.ExecuteSqlNoQuery(sql); } } } }
/// <summary> /// 创建房间 /// </summary> public KFCopyTeamCreateRsp CreateTeam(KFCopyTeamCreateReq req) { KFCopyTeamCreateRsp rsp = new KFCopyTeamCreateRsp(); try { lock (Mutex) { // 这里有个很微妙的情况,因为创建队伍时,首先GameServer要检查是否已经加入了一个队伍 // 但是如果GameServer重启了,那么必然能通过检查,但是其实在中心上已经为该角色加入了一个房间,必须强制踢掉 ForceLeaveRoom(req.Member.RoleID); if (!ClientAgentManager.Instance().IsAnyKfAgentAlive()) { rsp.ErrorCode = CopyTeamErrorCodes.KFServerIsBusy; return(rsp); } // 房间数量和 跨服活动服务器负载的检查 KFTeamCountControl control = _KFCopyService.dbMgr.TeamControl; if (control == null) { LogManager.WriteLog(LogTypes.Error, string.Format("跨服队伍创建失败, 丢失副本上线控制的配置文件 KFTeamCountControl")); rsp.ErrorCode = CopyTeamErrorCodes.ServerException; return(rsp); } HashSet <long> teamList = null; if (!CopyId2Teams.TryGetValue(req.CopyId, out teamList)) { teamList = new HashSet <long>(); CopyId2Teams[req.CopyId] = teamList; } CopyTeamData td = new CopyTeamData(); td.TeamID = req.TeamId; td.LeaderRoleID = req.Member.RoleID; td.FuBenId = req.CopyId; td.MinZhanLi = req.MinCombat; td.AutoStart = req.AutoStart > 0; td.TeamRoles.Add(req.Member); td.TeamRoles[0].IsReady = true; td.TeamName = td.TeamRoles[0].RoleName; td.MemberCount = td.TeamRoles.Count; CopyTeamDict.Add(td.TeamID, td); teamList.Add(td.TeamID); TimeLimitCopy.Add(td.TeamID, TimeUtil.NOW() + control.TeamMaxWaitMinutes * 60 * 1000); RoleId2JoinedTeam[req.Member.RoleID] = td.TeamID; CopyTeamCreateData data = new CopyTeamCreateData(); data.Member = req.Member; data.MinCombat = req.MinCombat; data.CopyId = req.CopyId; data.TeamId = td.TeamID; data.AutoStart = req.AutoStart; // 异步广播创建房间的事件 AsyncDataItem evItem = new AsyncDataItem(); evItem.EventType = KuaFuEventTypes.KFCopyTeamCreate; evItem.Args = new object[2] { req.Member.ServerId, data }; AddAsyncEvent(evItem); rsp.ErrorCode = CopyTeamErrorCodes.Success; rsp.Data = data; } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, string.Format("跨服队伍创建异常, serverid={0}, role={1}, copyid={2}", req.Member.ServerId, req.Member.RoleID, req.CopyId), ex); rsp.ErrorCode = CopyTeamErrorCodes.CenterServerFailed; } return(rsp); }
public KFCopyRoomCreateEvent(CopyTeamCreateData data) : base((int)GlobalEventTypes.KFCopyTeamCreate) { this.Data = data; }
public KFCopyTeamCreateRsp CreateTeam(KFCopyTeamCreateReq req) { KFCopyTeamCreateRsp rsp = new KFCopyTeamCreateRsp(); try { lock (this.Mutex) { this.ForceLeaveRoom(req.Member.RoleID); if (!ClientAgentManager.Instance().IsAnyKfAgentAlive()) { rsp.ErrorCode = CopyTeamErrorCodes.KFServerIsBusy; return(rsp); } KFTeamCountControl control = this._KFCopyService.dbMgr.TeamControl; if (control == null) { LogManager.WriteLog(LogTypes.Error, string.Format("跨服队伍创建失败, 丢失副本上线控制的配置文件 KFTeamCountControl", new object[0]), null, true); rsp.ErrorCode = CopyTeamErrorCodes.ServerException; return(rsp); } HashSet <long> teamList = null; if (!this.CopyId2Teams.TryGetValue(req.CopyId, out teamList)) { teamList = new HashSet <long>(); this.CopyId2Teams[req.CopyId] = teamList; } CopyTeamData td = new CopyTeamData(); td.TeamID = req.TeamId; td.LeaderRoleID = req.Member.RoleID; td.FuBenId = req.CopyId; td.MinZhanLi = req.MinCombat; td.AutoStart = (req.AutoStart > 0); td.AutoKick = req.AutoKick; td.TeamRoles.Add(req.Member); td.TeamRoles[0].IsReady = true; td.TeamName = td.TeamRoles[0].RoleName; td.MemberCount = td.TeamRoles.Count; this.CopyTeamDict.Add(td.TeamID, td); teamList.Add(td.TeamID); this.TimeLimitCopy.Add(td.TeamID, TimeUtil.NOW() + (long)(control.TeamMaxWaitMinutes * 60 * 1000)); this.RoleId2JoinedTeam[req.Member.RoleID] = td.TeamID; CopyTeamCreateData data = new CopyTeamCreateData(); data.Member = req.Member; data.MinCombat = req.MinCombat; data.CopyId = req.CopyId; data.TeamId = td.TeamID; data.AutoStart = req.AutoStart; data.AutoKick = req.AutoKick; this.AddAsyncEvent(new AsyncDataItem { EventType = KuaFuEventTypes.KFCopyTeamCreate, Args = new object[] { req.Member.ServerId, data } }); rsp.ErrorCode = CopyTeamErrorCodes.Success; rsp.Data = data; } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, string.Format("跨服队伍创建异常, serverid={0}, role={1}, copyid={2}", req.Member.ServerId, req.Member.RoleID, req.CopyId), ex, true); rsp.ErrorCode = CopyTeamErrorCodes.CenterServerFailed; } return(rsp); }
/// <summary> /// 队伍创建回调 /// </summary> /// <param name="data"></param> private void OnTeamCreate(CopyTeamCreateData data) { if (data == null) { return; } bool isKuaFuCopy = IsKuaFuCopy(data.CopyId); CopyTeamData td = new CopyTeamData(); td.TeamID = data.TeamId; td.LeaderRoleID = data.Member.RoleID; td.FuBenId = data.CopyId; td.MinZhanLi = data.MinCombat; td.AutoStart = data.AutoStart > 0; td.TeamRoles.Add(data.Member); td.TeamRoles[0].IsReady = true; td.TeamName = td.TeamRoles[0].RoleName; //KF td.MemberCount = td.TeamRoles.Count; lock (Mutex) { TeamDict[td.TeamID] = td; HashSet <long> teams = null; if (FuBenId2Teams.TryGetValue(td.FuBenId, out teams) && !teams.Contains(td.TeamID)) { teams.Add(td.TeamID); } if (data.Member.ServerId == ThisServerId) { RoleId2JoinedTeam[data.Member.RoleID] = td.TeamID; GameClient client = GameManager.ClientMgr.FindClient(data.Member.RoleID); if (client != null) { NotifyTeamCmd(client, CopyTeamErrorCodes.Success, (int)TeamCmds.Create, td.TeamID, td.TeamName); } } NotifyTeamData(td); NotifyTeamListChange(td); } /* * int roleID = client.ClientData.RoleID; * long teamID = FindRoleID2TeamID(roleID); * if (teamID > 0) * { * QuitFromTeam(client); * } * * teamID = GetNextAutoID(); * AddRoleID2TeamID(roleID, teamID); * * CopyTeamData td = new CopyTeamData() * { * TeamID = teamID, * LeaderRoleID = roleID, * SceneIndex = copyId, * MinZhanLi = minCombat, * AutoStart = autoStart > 0, * }; * * if (null == td.TeamRoles) * { * td.TeamRoles = new List<CopyTeamMemberData>(); * } * * td.TeamRoles.Add(ClientDataToTeamMemberData(client.ClientData)); * td.TeamRoles[0].IsReady = true; * td.TeamName = td.TeamRoles[0].RoleName; * td.MemberCount = td.TeamRoles.Count; * * //存入组队管理队列 * AddData(teamID, td); * * //通知组队数据的指令信息 * NotifyTeamCmd(client, CopyTeamErrorCodes.Success, (int)TeamCmds.Create, teamID, td.TeamName); * NotifyTeamData(td); * * //添加队伍需要向注册通知的用户发送变化列表 * NotifyTeamListChange(td);*/ }