diff --git a/internal_stats_server.py b/internal_stats_server.py
new file mode 100644
index 0000000..7ff45b2
--- /dev/null
+++ b/internal_stats_server.py
@@ -0,0 +1,85 @@
+from twisted.web import server, resource
+from twisted.internet import reactor
+from twisted.internet.error import ReactorAlreadyRunning
+from multiprocessing.managers import BaseManager
+import time
+import datetime
+
+class GameSpyServerDatabase(BaseManager):
+ pass
+
+GameSpyServerDatabase.register("get_server_list")
+
+class StatsPage(resource.Resource):
+ isLeaf = True
+
+ def __init__(self, stats):
+ self.stats = stats
+
+ def render_GET(self, request):
+ # TODO: Make this easier to modify later
+
+ server_list = stats.get_server_list()
+
+ output = ""
+ output += "
"
+ output += ""
+ output += "| Game ID | # Players | "
+ output += "
"
+
+ if server_list != None:
+ for game in server_list:
+ if len(server_list[game]) == 0:
+ continue
+
+ output += ""
+ output += "| " + game + " | "
+ output += "%d | " % (len(server_list[game]))
+ output += "
"
+
+ output += "
"
+
+ output += "
"
+ output += "Last updated: %s
" % (stats.get_last_update_time())
+ output += ""
+
+ return output
+
+class InternalStatsServer(object):
+ def __init__(self):
+ self.last_update = 0
+ self.next_update = 0
+ self.server_list = None
+ self.seconds_per_update = 60 # The number of seconds to wait before updating the server list
+
+ def start(self):
+ manager_address = ("127.0.0.1", 27500)
+ manager_password = ""
+ self.server_manager = GameSpyServerDatabase(address = manager_address, authkey= manager_password)
+ self.server_manager.connect()
+
+ site = server.Site(StatsPage(self))
+ reactor.listenTCP(9001, site)
+
+ try:
+ if reactor.running == False:
+ reactor.run(installSignalHandlers=0)
+ except ReactorAlreadyRunning:
+ pass
+
+ def get_server_list(self):
+ if self.next_update == 0 or self.next_update - time.time() <= 0:
+ self.last_update = time.time()
+ self.next_update = time.time() + self.seconds_per_update
+ self.server_list = self.server_manager.get_server_list()._getvalue()
+
+ print self.server_list
+
+ return self.server_list
+
+ def get_last_update_time(self):
+ return str(datetime.datetime.fromtimestamp(self.last_update))
+
+if __name__ == "__main__":
+ stats = InternalStatsServer()
+ stats.start()
diff --git a/master_server.py b/master_server.py
index 4c1a17b..ded9545 100644
--- a/master_server.py
+++ b/master_server.py
@@ -6,6 +6,7 @@ from gamespy_qr_server import GameSpyQRServer
from gamespy_server_browser_server import GameSpyServerBrowserServer
from gamespy_gamestats_server import GameSpyGamestatsServer
from nintendo_nas_server import NintendoNasServer
+from internal_stats_server import InternalStatsServer
import gamespy.gs_database as gs_database
@@ -43,6 +44,10 @@ def start_nas_server():
nas_server = NintendoNasServer()
nas_server.start()
+def start_stats_server():
+ stats_server = InternalStatsServer()
+ stats_server.start()
+
if __name__ == "__main__":
# Let database initialize before starting any servers.
# This fixes any conflicts where two servers find an uninitialized database at the same time and both try to
@@ -72,3 +77,6 @@ if __name__ == "__main__":
nas_server_thread = threading.Thread(target=start_nas_server)
nas_server_thread.start()
+
+# stats_server_thread = threading.Thread(target=start_stats_server)
+# stats_server_thread.start()