/
game.py
62 lines (52 loc) · 2 KB
/
game.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import logging
import os
import connect
import main
class GameAction(object): # distinguish between actions and events?
pass
class GameObject(object):
def __init__(self):
self.actions = []
self.context = None
class GameRoute(object):
pass
class GameServer(object):
def __init__(self, host, port, debug=False):
self.actionable = []
self.avatars = []
self.connections = []
connect.ThreadedTCPServer.allow_reuse_address = debug
if debug:
logging.debug("Server allow_reuse_address is active for debugging purposes!")
self.server = connect.ThreadedTCPServer(
self, (host, port), connect.ThreadedTCPRequestHandler)
self.server_thread = connect.make_target_thread(
self.server.serve_forever)
def run(self):
while self.server_thread.is_alive():
line = None
for connection in self.connections:
line = connection.readline()
if line:
if line == 'stop':
self.stop()
else:
print("Got:", line.upper())
connection.write(line.upper())
for avatar in self.avatars:
pass # calculate runtime stats as necessary
for obj in self.actionable:
pass # perform queued actions and remove if complete
def stop(self):
if self.server_thread.is_alive():
logging.info("Shutting down game server...")
logging.info("Clearing connections...")
while self.connections:
self.connections.pop(0).close()
logging.info("Connections cleared successfully.")
self.server.shutdown()
self.server.server_close()
logging.info("Game server shutdown successful.")
def add_connection(self, connection):
connection.avatar = GameObject()
self.connections.append(connection)