about summary refs log tree commit diff
path: root/masterserver/src
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2007-07-21 18:07:27 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2007-07-21 18:07:27 +0000
commit9e4aea97bdb5a903150df57f8d546733ce4b4db2 (patch)
tree7e18776bd7ace981895bca01ac753c9c289a71a5 /masterserver/src
parentf0e8502050ce27b9cef72fa385619d13faa35c27 (diff)
downloadzcatch-9e4aea97bdb5a903150df57f8d546733ce4b4db2.tar.gz
zcatch-9e4aea97bdb5a903150df57f8d546733ce4b4db2.zip
lots of cool new features :D new master server
Diffstat (limited to 'masterserver/src')
-rw-r--r--masterserver/src/main.cpp29
-rw-r--r--masterserver/src/masterserver.cpp176
-rw-r--r--masterserver/src/network.cpp39
3 files changed, 0 insertions, 244 deletions
diff --git a/masterserver/src/main.cpp b/masterserver/src/main.cpp
deleted file mode 100644
index 380830ad..00000000
--- a/masterserver/src/main.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <cstdio>
-#include <cstdlib>
-
-#include "masterserver.h"
-
-int main(int argc, char *argv[])
-{
-	if (argc != 2)
-	{
-		puts("Usage: masterserver <port>    (this will bind the server to the port specified (both udp and tcp).");
-		return -1;
-	}
-
-	int port = atoi(argv[1]);
-
-	CMasterServer masterServer;
-	masterServer.Init(port);
-
-	while (1)
-	{
-		masterServer.Tick();
-
-		thread_sleep(10);
-	}
-
-	masterServer.Shutdown();
-	
-	return 0;
-}
diff --git a/masterserver/src/masterserver.cpp b/masterserver/src/masterserver.cpp
deleted file mode 100644
index 383c696e..00000000
--- a/masterserver/src/masterserver.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-#include <ctime>
-
-#include "masterserver.h"
-
-void CMasterServer::Init(int port)
-{
-	netaddr4 addr(0, 0, 0, 0, port);
-	addr.port = port;
-	
-	net_init();
-	m_UDPSocket.open(port);
-	m_TCPSocket.open(&addr);
-	m_TCPSocket.set_non_blocking();
-	m_TCPSocket.listen();
-}
-
-void CMasterServer::Shutdown()
-{
-	m_UDPSocket.close();
-}
-
-void CMasterServer::Tick()
-{
-	m_CurrentTime = time(NULL);
-	
-	ListenForHeartBeats();
-	ListenForServerListPolls();
-
-	CleanUpServerList();
-}
-
-void CMasterServer::ListenForHeartBeats()
-{
-	netaddr4 from;
-	char data[1024];
-	int dataSize;
-
-	// read udp data while there is data to read :)
-	while ((dataSize = m_UDPSocket.recv(&from, (char *)data, sizeof(data))) > 0)
-	{
-		// compare the received data size to the expected size
-		if (dataSize == HEARTBEAT_SIZE)
-		{
-			char *d = data;
-			int32 signature;
-			d = ReadInt32(d, &signature);
-		
-			// make sure the signature is correct
-			if (signature == HEARTBEAT_SIGNATURE)
-			{
-				CServerInfo info;
-				info.Deserialize(d);
-
-				from.port = 8303;
-				info.SetAddress(&from);
-
-				dbg_msg("got heartbeat", "IP: %i.%i.%i.%i:%i", (int)from.ip[0], (int)from.ip[1], (int)from.ip[2], (int)from.ip[3], from.port);
-
-				dbg_msg("refresh", "okay. server count: %i", m_ServerCount);
-
-				ProcessHeartBeat(info);	
-			}
-			else
-			{}	// unexpected signature
-		}
-		else
-		{}	// unknown data received
-	}
-}
-
-void CMasterServer::ProcessHeartBeat(CServerInfo info)
-{
-	// find the corresponding server info
-	CServerInfo *serverInfo = FindServerInfo(info.IP(), info.Port());
-
-	// if it isn't in the list already, try to get an unused slot
-	if (!serverInfo)
-		serverInfo = GetUnusedSlot();
-
-	// if we STILL don't have one, we're out of luck.
-	if (!serverInfo)
-		return;
-	
-	*serverInfo = info;
-	serverInfo->Refresh(m_CurrentTime);
-
-	// mark the server list packet as old
-	m_ServerListPacketIsOld = true;
-}
-
-CServerInfo *CMasterServer::FindServerInfo(int32 ip, int32 port)
-{
-	// for now, just loop over the array
-	for (int i = 0; i < m_ServerCount; i++)
-	{
-		CServerInfo *info = &m_Servers[i];
-		if (info->IP() == ip && info->Port() == port)
-			return info;
-	}
-
-	return 0x0;
-}
-
-CServerInfo *CMasterServer::GetUnusedSlot()
-{
-	if (m_ServerCount == MAXSERVERS)
-		return 0x0;
-	else
-		return &m_Servers[m_ServerCount++];
-}
-
-void CMasterServer::CleanUpServerList()
-{
-	for (int i = 0; i < m_ServerCount; i++)
-	{
-		CServerInfo *serverInfo = &m_Servers[i];
-		
-		// check if it's time to remove it from the list
-		if (serverInfo->LastRefresh() + HEARTBEAT_LIFETIME < m_CurrentTime)
-		{
-			if (i + 1 == m_ServerCount)
-			{
-				// if we're at the last one, just decrease m_ServerCount
-				--m_ServerCount;
-			}
-			else
-			{
-				// otherwise, copy the last slot here and then decrease i and m_ServerCount
-				*serverInfo = m_Servers[m_ServerCount - 1];
-				--i;
-				--m_ServerCount;
-			}
-
-			// mark the server list packet as old and outdated
-			m_ServerListPacketIsOld = true;
-		}
-	}
-}
-
-void CMasterServer::ListenForServerListPolls()
-{
-	socket_tcp4 client;
-
-	// accept clients while there are clients to be accepted
-	while (m_TCPSocket.accept(&client))
-	{
-		// maybe we've prepared the packet already... it'd be silly to do it twice
-		if (m_ServerListPacketIsOld)
-		{
-			BuildServerListPacket();
-		}
-		
-		// send the server list and then close the socket
-		client.send(m_ServerListPacket, m_ServerListPacketSize);
-		client.close();
-	}
-}
-
-void CMasterServer::BuildServerListPacket()
-{
-	char *d = m_ServerListPacket;
-
-	d = WriteInt32(d, 'TWSL');
-	d = WriteInt32(d, MASTERSERVER_VERSION);
-
-	d = WriteInt32(d, m_ServerCount);
-	
-	for (int i = 0; i < m_ServerCount; i++)
-	{
-		CServerInfo *info = &m_Servers[i];
-		d = info->Serialize(d);
-	}
-
-	m_ServerListPacketSize = d - m_ServerListPacket;
-	m_ServerListPacketIsOld = false;
-}
diff --git a/masterserver/src/network.cpp b/masterserver/src/network.cpp
deleted file mode 100644
index 7d557cdf..00000000
--- a/masterserver/src/network.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <cstring>
-#include "common.h"
-#include "network.h"
-
-char *WriteInt32(char *buffer, int32 value)
-{
-	buffer[0] = value >> 24;
-	buffer[1] = value >> 16;
-	buffer[2] = value >> 8;
-	buffer[3] = value;
-
-	return buffer + sizeof(int32);
-}
-
-char *WriteFixedString(char *buffer, const char *string, int strlen)
-{
-	memcpy(buffer, string, strlen);
-
-	return buffer + strlen;
-}
-
-
-
-char *ReadInt32(char *buffer, int32 *value)
-{
-	*value = buffer[0] << 24;
-	*value |= buffer[1] << 16;
-	*value |= buffer[2] << 8;
-	*value |= buffer[3];
-
-	return buffer + sizeof(int32);
-}
-
-char *ReadFixedString(char *buffer, char *string, int strlen)
-{
-	memcpy(string, buffer, strlen);
-
-	return buffer + strlen;
-}