//========= Copyright Valve Corporation, All rights reserved. ============//
//
//
//
//=============================================================================

#include "cbase.h"

#include "base_gcmessages.pb.h"
#include "convar.h"
#include "gcsdk/gcclientjob.h"
#include "gcsdk/jobmgr.h"

// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"

using namespace GCSDK;

//=============================================================================

class CGCReplicateConVars : public CGCClientJob
{
public:
	CGCReplicateConVars( CGCClient *pClient ) : CGCClientJob( pClient ) {}

	virtual bool BYieldingRunGCJob( GCSDK::IMsgNetPacket *pNetPacket )
	{
		CProtoBufMsg< CMsgReplicateConVars > msg ( pNetPacket );
		for ( int i = 0; i < msg.Body().convars_size(); ++i )
		{
			const CMsgConVarValue &updatedConVar = msg.Body().convars( i );
			ConVar *pVar = g_pCVar->FindVar( updatedConVar.name().data() );
			if ( pVar )
			{
				pVar->SetValue( updatedConVar.value().data() );
			}
		}

		return true;
	}
};

//=============================================================================

GC_REG_JOB( CGCClient, CGCReplicateConVars, "CGCReplicateConVars", k_EMsgGCReplicateConVars, GCSDK::k_EServerTypeGCClient );

class CGCUpdateConVar : public CGCClientJob
{
public:
	CGCUpdateConVar( CGCClient *pClient ) : CGCClientJob( pClient ) {}

	virtual bool BYieldingRunGCJob( GCSDK::IMsgNetPacket *pNetPacket )
	{
		CProtoBufMsg< CMsgConVarValue > msg ( pNetPacket );
		ConVar *pVar = g_pCVar->FindVar( msg.Body().name().data() );
		if ( pVar )
		{
			pVar->SetValue( msg.Body().value().data() );
		}
		return true;
	}
};

GC_REG_JOB( CGCClient, CGCUpdateConVar, "CGCUpdateConVar", k_EMsgGCConVarUpdated, GCSDK::k_EServerTypeGCClient );