Beispiel #1
0
 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);
             }
         }
     }
 }
Beispiel #2
0
        /// <summary>
        /// 开始游戏
        /// </summary>
        public KFCopyTeamStartRsp StartGame(KFCopyTeamStartReq req)
        {
            KFCopyTeamStartRsp rsp = new KFCopyTeamStartRsp();

            try
            {
                lock (Mutex)
                {
                    CopyTeamData td = null;
                    if (!CopyTeamDict.TryGetValue(req.TeamId, out td))
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.TeamIsDestoryed;
                        return(rsp);
                    }

                    if (td.StartTime > 0)
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.TeamAlreadyStart;
                        return(rsp);
                    }

                    if (td.LeaderRoleID != req.RoleId)
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader;
                        return(rsp);
                    }

                    CopyTeamMemberData leader = td.TeamRoles.Find(_role => _role.RoleID == req.RoleId);
                    if (leader == null || leader.RoleID != req.RoleId)
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader;
                        return(rsp);
                    }

                    if (td.TeamRoles.Exists(_role => _role.IsReady == false))
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.MemeberNotReady;
                        return(rsp);
                    }

                    int kfSrvId;
                    if (!ClientAgentManager.Instance().AssginKfFuben(GameTypes.KuaFuCopy, td.TeamID, td.TeamRoles.Count, out kfSrvId))
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.KFServerIsBusy;
                        return(rsp);
                    }

                    td.StartTime  = TimeUtil.NOW();
                    td.KFServerId = kfSrvId;
                    td.FuBenSeqID = 0; // not set

                    CopyTeamStartData data = new CopyTeamStartData();
                    data.TeamId     = req.TeamId;
                    data.StartMs    = td.StartTime;
                    data.ToServerId = kfSrvId;
                    data.FuBenSeqId = td.FuBenSeqID;
                    AsyncDataItem evItem = new AsyncDataItem();
                    evItem.EventType = KuaFuEventTypes.KFCopyTeamStart;
                    evItem.Args      = new object[2] {
                        leader.ServerId, data
                    };
                    AddAsyncEvent(evItem);

                    // 副本超时强制关闭的时间  副本开始(客户端点击开始) + 副本持续时间 + 3分钟额外时间
                    TimeLimitCopy[td.TeamID] = td.StartTime + req.LastMs + 3 * 60 * 1000;
                    rsp.ErrorCode            = CopyTeamErrorCodes.Success;
                    rsp.Data = data;
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("开始跨服副本队伍异常, role={0}, teamid={1}", req.RoleId, req.TeamId), ex);
                rsp.ErrorCode = CopyTeamErrorCodes.CenterServerFailed;
            }

            return(rsp);
        }
Beispiel #3
0
 public KFCopyRoomStartEvent(CopyTeamStartData data)
     : base((int)GlobalEventTypes.KFCopyTeamStart)
 {
     this.Data = data;
 }
Beispiel #4
0
        public KFCopyTeamStartRsp StartGame(KFCopyTeamStartReq req)
        {
            KFCopyTeamStartRsp rsp = new KFCopyTeamStartRsp();

            try
            {
                lock (this.Mutex)
                {
                    CopyTeamData td = null;
                    if (!this.CopyTeamDict.TryGetValue(req.TeamId, out td))
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.TeamIsDestoryed;
                        return(rsp);
                    }
                    if (td.StartTime > 0L)
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.TeamAlreadyStart;
                        return(rsp);
                    }
                    if (td.LeaderRoleID != req.RoleId)
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader;
                        return(rsp);
                    }
                    CopyTeamMemberData leader = td.TeamRoles.Find((CopyTeamMemberData _role) => _role.RoleID == td.LeaderRoleID);
                    if (leader == null || leader.RoleID != req.RoleId)
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader;
                        return(rsp);
                    }
                    if (td.TeamRoles.Exists((CopyTeamMemberData _role) => !_role.IsReady))
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.MemeberNotReady;
                        return(rsp);
                    }
                    int kfSrvId;
                    if (!ClientAgentManager.Instance().AssginKfFuben(GameTypes.KuaFuCopy, td.TeamID, td.TeamRoles.Count, out kfSrvId))
                    {
                        rsp.ErrorCode = CopyTeamErrorCodes.KFServerIsBusy;
                        return(rsp);
                    }
                    td.StartTime  = TimeUtil.NOW();
                    td.KFServerId = kfSrvId;
                    td.FuBenSeqID = 0;
                    CopyTeamStartData data = new CopyTeamStartData();
                    data.TeamId     = req.TeamId;
                    data.StartMs    = td.StartTime;
                    data.ToServerId = kfSrvId;
                    data.FuBenSeqId = td.FuBenSeqID;
                    this.AddAsyncEvent(new AsyncDataItem
                    {
                        EventType = KuaFuEventTypes.KFCopyTeamStart,
                        Args      = new object[]
                        {
                            leader.ServerId,
                            data
                        }
                    });
                    this.TimeLimitCopy[td.TeamID] = td.StartTime + (long)req.LastMs + 180000L;
                    rsp.ErrorCode = CopyTeamErrorCodes.Success;
                    rsp.Data      = data;
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteLog(LogTypes.Error, string.Format("开始跨服副本队伍异常, role={0}, teamid={1}", req.RoleId, req.TeamId), ex, true);
                rsp.ErrorCode = CopyTeamErrorCodes.CenterServerFailed;
            }
            return(rsp);
        }
Beispiel #5
0
        /// <summary>
        /// 开始游戏 回调
        /// </summary>
        private void OnTeamStart(CopyTeamStartData data)
        {
            if (data == null)
            {
                return;
            }

            lock (Mutex)
            {
                CopyTeamData td = null;
                if (!this.TeamDict.TryGetValue(data.TeamId, out td))
                {
                    return;
                }

                td.StartTime  = data.StartMs;
                td.KFServerId = data.ToServerId;
                td.FuBenSeqID = data.FuBenSeqId;

                bool   isKuaFuCopy  = IsKuaFuCopy(td.FuBenId);
                string toServerIp   = string.Empty;
                int    toServerPort = 0;
                if (isKuaFuCopy)
                {
                    if (!KFCopyRpcClient.getInstance().GetKuaFuGSInfo(data.ToServerId, out toServerIp, out toServerPort))
                    {
                        LogManager.WriteLog(LogTypes.Error, string.Format("跨服副本CopyType={0}, RoomId={1}被分配到服务器ServerId={2}, 但是找不到该跨服活动服务器", td.FuBenId, data.TeamId, data.ToServerId));
                        return;
                    }
                }
                else
                {
                    FuBenSeq2TeamId[td.FuBenSeqID] = td.TeamID;
                }

                foreach (var member in td.TeamRoles)
                {
                    if (member.ServerId == ThisServerId)
                    {
                        GameClient client = GameManager.ClientMgr.FindClient(member.RoleID);
                        if (client == null)
                        {
                            continue;
                        }

                        if (isKuaFuCopy)
                        {
                            client.ClientSocket.ClientKuaFuServerLoginData.RoleId     = member.RoleID;
                            client.ClientSocket.ClientKuaFuServerLoginData.GameId     = td.TeamID;
                            client.ClientSocket.ClientKuaFuServerLoginData.GameType   = (int)GameTypes.KuaFuCopy;
                            client.ClientSocket.ClientKuaFuServerLoginData.EndTicks   = 0;
                            client.ClientSocket.ClientKuaFuServerLoginData.ServerId   = ThisServerId;
                            client.ClientSocket.ClientKuaFuServerLoginData.ServerIp   = toServerIp;
                            client.ClientSocket.ClientKuaFuServerLoginData.ServerPort = toServerPort;
                            client.ClientSocket.ClientKuaFuServerLoginData.FuBenSeqId = data.FuBenSeqId;
                        }

                        // 通知倒计时
                        GameManager.ClientMgr.NotifyTeamMemberFuBenEnterMsg(client, td.LeaderRoleID, td.FuBenId, td.FuBenSeqID);
                    }
                }

                NotifyTeamListChange(td);
            }
        }