server.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
  2. import json
  3. from citybuilder.messagehandler import MessageHandler
  4. from citybuilder.player import Player
  5. connections = {}
  6. players = {}
  7. class MainServerSocket(WebSocket):
  8. def handleMessage(self):
  9. global config
  10. try:
  11. print("Message received: " + self.data)
  12. message = json.loads(self.data)
  13. if self not in connections.values():
  14. if message['type'] == "login":
  15. if message['username'] in players and players[message['username']].check_password(message['password']):
  16. connections[message['username']] = self
  17. self.player = players[message['username']]
  18. self.player.login(self)
  19. print(message['username'] + " logged in")
  20. else:
  21. self.send_json({'result': 1})
  22. elif message['type'] == "register":
  23. if message['username'] not in players:
  24. connections[message['username']] = self
  25. players[message['username']] = Player(message['username'], message['password'], config)
  26. self.player = players[message['username']]
  27. self.player.login(self)
  28. else:
  29. self.send_json({'result': 2})
  30. else:
  31. self.send_json({'result': 3})
  32. else:
  33. messagehandler.handle_message(self, self.player, message)
  34. except Exception as e:
  35. print("Exception in message handling:")
  36. print(e)
  37. def send_json(self, data):
  38. self.sendMessage(json.dumps(data))
  39. def handleConnected(self):
  40. print(self.address, 'connected')
  41. def handleClose(self):
  42. print(self.address, 'closed')
  43. def run_server(configuration):
  44. global messagehandler
  45. global config
  46. config = configuration
  47. messagehandler = MessageHandler(config)
  48. server = SimpleWebSocketServer('', config['server']['port'], MainServerSocket)
  49. server.serveforever()