/
Controller.py
73 lines (58 loc) · 2.24 KB
/
Controller.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
63
64
65
66
67
68
69
70
71
72
73
import os
__author__ = 'pezzati'
from Network import *
from AI import AI
from threading import Thread
from queue import Queue
class Controller():
def __init__(self):
self.sending_flag = True
self.conf = {}
self.network = None
self.queue = Queue()
self.world = World(self.queue)
self.client = AI()
self.argNames = ["AICHostIP", "AICHostPort", "AICToken", "AICRetryDelay"]
self.argDefaults = ["127.0.0.1", 7099, "00000000000000000000000000000000", "1000"]
def start(self):
self.read_settings()
self.network = Network(ip=self.conf[self.argNames[0]],
port=self.conf[self.argNames[1]],
token=self.conf[self.argNames[2]],
message_handler=self.handle_message)
self.network.connect()
def run():
while self.sending_flag:
event = self.queue.get()
self.queue.task_done()
message = {
'name': Event.EVENT,
'args': [{'type': event.type, 'args': event.args}]
}
self.network.send(message)
Thread(target=run, daemon=True).start()
def terminate(self):
print("finished!")
self.network.close()
self.sending_flag = False
def read_settings(self):
if os.environ.get(self.argNames[0]) is None:
for i in range(len(self.argNames)):
self.conf[self.argNames[i]] = self.argDefaults[i]
else:
for i in range(len(self.argNames)):
self.conf[self.argNames[i]] = os.environ.get(self.argNames[i])
def handle_message(self, message):
if message[Constants.KEY_NAME] == Constants.MESSAGE_TYPE_INIT:
self.world.handle_init_message(message)
elif message[Constants.KEY_NAME] == Constants.MESSAGE_TYPE_TURN:
self.world.handle_turn_message(message)
self.do_turn()
elif message[Constants.KEY_NAME] == Constants.MESSAGE_TYPE_SHUTDOWN:
self.terminate()
def do_turn(self):
def run():
self.client.do_turn(self.world)
Thread(target=run, daemon=True).start()
c = Controller()
c.start()