summaryrefslogtreecommitdiff
path: root/tracker/AdminServer/MasterMsgHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tracker/AdminServer/MasterMsgHandler.cpp')
-rw-r--r--tracker/AdminServer/MasterMsgHandler.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/tracker/AdminServer/MasterMsgHandler.cpp b/tracker/AdminServer/MasterMsgHandler.cpp
new file mode 100644
index 0000000..cf42029
--- /dev/null
+++ b/tracker/AdminServer/MasterMsgHandler.cpp
@@ -0,0 +1,76 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================
+
+#include "MasterMsgHandler.h"
+
+#include "IGameList.h"
+#include "serverpage.h"
+
+#include <VGUI_Controls.h>
+#include <VGUI_IVGui.h>
+
+//-----------------------------------------------------------------------------
+// Purpose: Constructor
+//-----------------------------------------------------------------------------
+CMasterMsgHandler::CMasterMsgHandler( IGameList *baseobject, HANDLERTYPE type, void *typeinfo /*= NULL*/ )
+ : CMsgHandler( type, typeinfo )
+{
+ m_pGameList = baseobject;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Process cracked message
+//-----------------------------------------------------------------------------
+bool CMasterMsgHandler::Process( netadr_t *from, CMsgBuffer *msg )
+{
+ // Skip the control character
+ msg->ReadByte();
+ // Skip the return character
+ msg->ReadByte();
+
+ // Get the batch ID
+ int unique = msg->ReadLong();
+
+ // Remainder of message length is 6 byte IP addresses
+ int nNumAddresses = msg->GetCurSize() - msg->GetReadCount();
+ assert( !( nNumAddresses % 6 ) );
+ // Each address is 6 bytes long
+ nNumAddresses /= 6;
+
+ while (nNumAddresses-- > 0)
+ {
+ serveritem_t server;
+ memset(&server, 0, sizeof(server));
+ for (int i = 0; i < 4; i++)
+ {
+ server.ip[i] = msg->ReadByte();
+ }
+ server.port = msg->ReadShort();
+ server.port = (server.port & 0xff) << 8 | (server.port & 0xff00) >> 8; // roll your own ntohs
+ server.received = 0;
+ server.listEntry = NULL;
+ server.doNotRefresh = false;
+ server.hadSuccessfulResponse = false;
+ server.map[0] = 0;
+ server.gameDir[0] = 0;
+
+ m_pGameList->AddNewServer(server);
+ }
+
+ if (!unique)
+ {
+ m_pGameList->ListReceived(false, 0);
+ }
+ else
+ {
+ // wait until we've refreshed the list before getting next batch of servers
+ m_pGameList->ListReceived(true, unique);
+ }
+
+ return true;
+}
+