Skip to content
This repository has been archived by the owner on Aug 7, 2024. It is now read-only.

worker no longer sends extra request to game for data #914

Merged
merged 11 commits into from
Dec 10, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion aimmo-game-creator/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,4 @@ ENV WORKER_MANAGER=kubernetes
CMD ["python", "./service.py", "0.0.0.0"]

FROM base as tester
ENV WORKER_MANAGER=kubernetes
CMD ["python", "setup.py", "test"]
1 change: 0 additions & 1 deletion aimmo-game-worker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,4 @@ ENV FLASK_ENV='development'
CMD python ./service.py 0.0.0.0 $PORT $DATA_URL

FROM base as tester
ENV WORKER_MANAGER=kubernetes
CMD python setup.py test
3 changes: 1 addition & 2 deletions aimmo-game-worker/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,9 @@ def get_code_and_options():

@app.route('/turn/', methods=['POST'])
def process_turn():
code, options = get_code_and_options()
data = flask.request.get_json()
world_map = WorldMap(**data['world_map'])

code, options = data['code'], data['options']
avatar_state = AvatarState(location=data['avatar_state']['location'],
score=data['avatar_state']['score'],
health=data['avatar_state']['health'])
Expand Down
1 change: 0 additions & 1 deletion aimmo-game/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ COPY --from=builder /usr/local/lib/python3.6/site-packages /usr/local/lib/python
COPY . .

FROM base as tester
ENV WORKER_MANAGER=kubernetes
CMD python setup.py test

FROM base as runner
Expand Down
9 changes: 8 additions & 1 deletion aimmo-game/simulation/worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ class Worker(object):
def __init__(self, worker_url):
self.url = worker_url
self.log = None
self.code = None
self.serialised_action = None
self.has_code_updated = False

Expand All @@ -18,7 +19,13 @@ def _set_defaults(self):

def fetch_data(self, state_view):
try:
response = requests.post(self.url, json=state_view)
code_and_options = {
'code': self.code,
'options': {},
'state': None,
}
data = {**state_view, **code_and_options}
response = requests.post(self.url, json=data)
response.raise_for_status()
data = response.json()
self.serialised_action = data['action']
Expand Down
23 changes: 4 additions & 19 deletions aimmo-game/simulation/worker_managers/worker_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,16 @@
LOGGER = logging.getLogger(__name__)


class _WorkerManagerData(object):
"""
This class is thread safe
"""

def __init__(self, user_codes):
self._user_codes = user_codes

def set_code(self, player):
self._user_codes[player['id']] = player['code']

def get_code(self, player_id):
return self._user_codes[player_id]


class WorkerManager(object):
"""
Methods of this class must be thread safe unless explicitly stated.
"""
def __init__(self, port=5000):
self._data = _WorkerManagerData({})
self.player_id_to_worker = {}
self.port = port

def get_code(self, player_id):
return self._data.get_code(player_id)
return self.player_id_to_worker[player_id].code

def fetch_all_worker_data(self, player_id_to_game_state):
"""
Expand All @@ -44,7 +28,8 @@ def fetch_all_worker_data(self, player_id_to_game_state):
"""
def prepare_request_threads():
return [Thread(target=worker.fetch_data,
args=(player_id_to_game_state[player_id],)) for (player_id, worker) in self.player_id_to_worker.items()]
args=(player_id_to_game_state[player_id],))
for (player_id, worker) in self.player_id_to_worker.items()]

def timed_process_for_worker_turn_requests(duration):
threads = prepare_request_threads()
Expand All @@ -69,7 +54,7 @@ def remove_worker(self, player_id):
raise NotImplementedError

def update_code(self, player):
self._data.set_code(player)
self.player_id_to_worker[player['id']].code = player['code']

def add_new_worker(self, player_id):
worker_url_base = self.create_worker(player_id)
Expand Down
2 changes: 1 addition & 1 deletion version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.5.1
0.5.2