void CGameStats::ReportSession() { if(!m_serverReport) return; string name; ICVar* pName = gEnv->pConsole->GetCVar("sv_servername"); if(pName) name = pName->GetString(); if(name.empty()) name = gEnv->pNetwork->GetHostName(); CCryAction::GetCryAction()->OnActionEvent(SActionEvent(eAE_serverName, 0, name)); if(gEnv->pConsole->GetCVar("sv_lanonly")->GetIVal())//we're on LAN so report our name { string ip = gEnv->pNetwork->GetHostName(); ip += ":"; ip += gEnv->pConsole->GetCVar("sv_port")->GetString(); CCryAction::GetCryAction()->OnActionEvent(SActionEvent(eAE_serverIp, 0, ip)); } if(m_serverReport) { m_serverReport->SetServerValue("hostname",name); m_serverReport->SetServerValue("hostport",gEnv->pConsole->GetCVar("sv_port")->GetString()); char strProductVersion[256]; gEnv->pSystem->GetProductVersion().ToString(strProductVersion); m_serverReport->SetServerValue("gamever", strProductVersion); m_serverReport->SetServerValue("maxplayers",gEnv->pConsole->GetCVar("sv_maxplayers")->GetString()); ICVar* pFF = gEnv->pConsole->GetCVar("g_friendlyfireratio"); m_serverReport->SetServerValue("friendlyfire",pFF?((pFF->GetFVal()!=0)?"1":"0"):0); m_serverReport->SetServerValue("dx10",CCryAction::GetCryAction()->GetGameContext()->HasContextFlag(eGSF_ImmersiveMultiplayer)?"1":"0"); } ReportGame(); if((CCryAction::GetCryAction()->GetILevelSystem()->IsLevelLoaded() && CCryAction::GetCryAction()->IsGameStarted()) || m_startReportNeeded)//otherwise, OnLoadingStart will report it { if(m_serverReport && !m_reportStarted)//report now { m_serverReport->StartReporting(gEnv->pGame->GetIGameFramework()->GetServerNetNub(), m_pListener); m_reportStarted = true; } m_startReportNeeded = false; } m_startReportNeeded = !m_reportStarted; }
CGameServerChannel::~CGameServerChannel() { gEnv->pConsole->RemoveConsoleVarSink( this ); CCryAction::GetCryAction()->OnActionEvent(SActionEvent(eAE_channelDestroyed,1)); Cleanup(); }
void CGameServerChannel::OnDisconnect(EDisconnectionCause cause, const char *description) { //CryLogAlways("CGameServerChannel::OnDisconnect(%d, '%s')", cause, description?description:""); CCryAction::GetCryAction()->OnActionEvent(SActionEvent(eAE_clientDisconnected,int(cause),description)); IGameRules *pGameRules = CCryAction::GetCryAction()->GetIGameRulesSystem()->GetCurrentGameRules(); if (pGameRules && IsOnHold()) { pGameRules->OnClientDisconnect(GetChannelId(), cause, description, false); Cleanup(); return; } if (sv_timeout_disconnect && pGameRules && sv_timeout_disconnect->GetIVal()>0 && pGameRules->ShouldKeepClient(GetChannelId(), cause, description)) { if (m_pServerNub->PutChannelOnHold(this)) { pGameRules->OnClientDisconnect(GetChannelId(), cause, description, true); m_hasLoadedLevel=false; return; } } if (pGameRules) pGameRules->OnClientDisconnect(GetChannelId(), cause, description, false); Cleanup(); }
CGameServerChannel::CGameServerChannel(INetChannel *pNetChannel, CGameContext *pGameContext, CGameServerNub *pServerNub) : m_pServerNub(pServerNub), m_channelId(0), m_hasLoadedLevel(false), m_onHold(false) { Init( pNetChannel, pGameContext ); CRY_ASSERT(pNetChannel); #if NEW_BANDWIDTH_MANAGEMENT pNetChannel->SetServer(GetGameContext()->GetNetContext(), true); #else SetupNetChannel(pNetChannel); #endif // NEW_BANDWIDTH_MANAGEMENT if (!sv_timeout_disconnect) sv_timeout_disconnect=gEnv->pConsole->GetCVar("sv_timeout_disconnect"); gEnv->pConsole->AddConsoleVarSink( this ); CCryAction::GetCryAction()->OnActionEvent(SActionEvent(eAE_channelCreated,1)); }
void CGameClientNub::FailedActiveConnect(EDisconnectionCause cause, const char* description) { GameWarning("Failed connecting to server: %s", description); CCryAction::GetCryAction()->OnActionEvent(SActionEvent(eAE_connectFailed,int(cause),description)); }