Пример #1
0
        public KFCopyTeamCreateRsp CreateTeam(KFCopyTeamCreateReq req)
        {
            IKuaFuCopyService service = GetKuaFuService(true);

            if (service == null)
            {
                return(null);
            }

            return(service.CreateTeam(req));
        }
Пример #2
0
        public KFCopyTeamCreateRsp CreateTeam(KFCopyTeamCreateReq req)
        {
            IKuaFuCopyService   service = this.GetKuaFuService(true);
            KFCopyTeamCreateRsp result;

            if (service == null)
            {
                result = null;
            }
            else
            {
                result = service.CreateTeam(req);
            }
            return(result);
        }
Пример #3
0
 public KFCopyTeamCreateRsp CreateTeam(KFCopyTeamCreateReq req)
 {
     return(this.teamMgr.CreateTeam(req));
 }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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);
        }