summaryrefslogtreecommitdiff
path: root/game/shared/gc_replicated_convars.cpp
blob: 6e0ff1b29fe5edcb124d0534801ada5869bd817a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//========= 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 );