示例#1
0
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));
}
示例#5
0
void CGameClientNub::FailedActiveConnect(EDisconnectionCause cause, const char* description)
{
	GameWarning("Failed connecting to server: %s", description);
	CCryAction::GetCryAction()->OnActionEvent(SActionEvent(eAE_connectFailed,int(cause),description));
}