public KFCopyTeamCreateRsp CreateTeam(KFCopyTeamCreateReq req) { IKuaFuCopyService service = GetKuaFuService(true); if (service == null) { return(null); } return(service.CreateTeam(req)); }
public KFCopyTeamCreateRsp CreateTeam(KFCopyTeamCreateReq req) { IKuaFuCopyService service = this.GetKuaFuService(true); KFCopyTeamCreateRsp result; if (service == null) { result = null; } else { result = service.CreateTeam(req); } return(result); }
public KFCopyTeamCreateRsp CreateTeam(KFCopyTeamCreateReq req) { return(this.teamMgr.CreateTeam(req)); }
/// <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 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); }