giantsd/server.py

58 lines
2.0 KiB
Python
Raw Normal View History

2019-01-22 01:30:42 +01:00
from dpnet.netserver import Netserver
2020-05-27 14:09:44 +02:00
from giants.masterserver import MasterServer
import asyncio
2020-05-28 11:38:10 +02:00
## stats
import pymysql
2020-05-27 16:05:40 +02:00
num_players_alltime = 0
2019-01-22 01:30:42 +01:00
class Server:
def __init__(self, **kwargs):
self.listen_ip = kwargs.get("ip", "0.0.0.0")
self.listen_port = kwargs.get("port", 19711)
2020-05-28 11:38:10 +02:00
self.register_with_ms = kwargs.get("register", False)
## stats
self.db = pymysql.connect(host='192.168.40.2', user="gck", passwd="gck", db="gck", autocommit=True)
def db_execute(self, sql, args=None):
with self.db.cursor() as cursor:
cursor.execute(sql, args)
def db_query(self, sql, args=None):
with self.db.cursor() as cursor:
cursor.execute(sql, args)
t = cursor.fetchall()
return t
2019-02-05 01:35:22 +01:00
2020-05-27 14:09:44 +02:00
async def on_connection_received(self, ip, port):
version = 1.497
2020-05-28 11:38:10 +02:00
map_name = "Players last 24h/last 48h"
server_name = "\x04Don't forget to join our Discord: \x06https://discord.gg/Avj4azU\x01"
self.db_execute("INSERT INTO multiplayer_stats(ip, date) VALUES (%s, NOW())", (ip,))
stats_24 = self.db_query("SELECT COUNT(DISTINCT ip) FROM multiplayer_stats WHERE date + INTERVAL 1 DAY > NOW()")[0][0]
stats_48 = self.db_query("SELECT COUNT(DISTINCT ip) FROM multiplayer_stats WHERE date + INTERVAL 2 DAY > NOW()")[0][0]
player_count = stats_24
max_player_count = stats_48
2020-05-27 14:09:44 +02:00
return version, server_name, player_count, max_player_count, map_name
2019-02-05 01:35:22 +01:00
2019-01-22 01:30:42 +01:00
if __name__ == '__main__':
2020-05-27 14:09:44 +02:00
server = Server()
if server.register_with_ms:
ms = MasterServer(server)
2020-05-27 15:45:58 +02:00
register_thread = ms.register_and_run()
loop = asyncio.get_event_loop()
listen = loop.create_datagram_endpoint(lambda: Netserver(server), local_addr=(server.listen_ip, server.listen_port))
transport, protocol = loop.run_until_complete(listen)
try:
loop.run_forever()
except KeyboardInterrupt:
pass
transport.close()
loop.close()