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 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); }
public KFCopyRoomStartEvent(CopyTeamStartData data) : base((int)GlobalEventTypes.KFCopyTeamStart) { this.Data = data; }
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); }
/// <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); } }