/pymaster/pymaster_module.py

https://gitlab.com/etlive/masterserver-tester
Python | 68 lines | 52 code | 15 blank | 1 comment | 3 complexity | 68d67482646a8317632e3599dc86de20 MD5 | raw file
  1. from twisted.application import service
  2. from twisted.application import internet
  3. from twisted.python import log
  4. from twisted.python import usage
  5. from twisted.web import server
  6. from pymaster.q3.master_server import MasterServer
  7. from pymaster.q3.server_list import Servers
  8. from pymaster.q3.server_json_list import Root
  9. #import yaml
  10. Q3MASTER_PORT = "27950"
  11. JSON_PORT = "8080"
  12. class Options(usage.Options):
  13. optFlags = [
  14. ['debug', 'd', 'Emit debug messages']
  15. ]
  16. optParameters = [
  17. ["q3master_port", "p", Q3MASTER_PORT,
  18. "port the q3 master server runs on"],
  19. ["json_api_port", "q", JSON_PORT,
  20. "port the json api is served on"],
  21. ["master_server_file", "f", "master_servers.yaml",
  22. "the config file for masterservers"]
  23. ]
  24. class MasterServerService(service.Service):
  25. name = "Q3 Master"
  26. def __init__(self, port, server_list, master_servers_file):
  27. self.port = port
  28. self.server_list = Servers()
  29. self.server = None
  30. self.master_servers_file = master_servers_file
  31. def startService(self):
  32. from twisted.internet import reactor
  33. log.msg("Starting %s Server on port %s" % (self.name, self.port))
  34. master_server = MasterServer(self.server_list)
  35. self.server = reactor.listenUDP(self.port, master_server)
  36. with file(self.master_servers_file) as f:
  37. master_servers = yaml.load(f.read())
  38. delay = 0
  39. for k, v in master_servers.items():
  40. for i in v:
  41. reactor.callLater(delay, self.server.protocol.loop_getservers,
  42. (k, 27950), [str(i), "empty", "full"], 1800)
  43. delay = delay + 15
  44. def makeService(options):
  45. server_list = Servers()
  46. ms = service.MultiService()
  47. q3_master = MasterServerService(int(options["q3master_port"]), server_list,
  48. options["master_server_file"])
  49. q3_master.setServiceParent(ms)
  50. json_root = server.Site(Root(server_list))
  51. json_api = internet.TCPServer(int(options["json_api_port"]), json_root)
  52. json_api.setServiceParent(ms)
  53. return ms