def get_empires(request): save_file = None try: sessions.register_session(request.session) parsed = json.loads(request.body) if 'file' not in parsed: return _make_error('"file" parameter not set in POST') save_file = parsed['file'] save_watcher = finder.get_save(save_file, False) if not save_watcher or not save_watcher.valid(): return _make_error(f'Invalid save file: {save_file}') save = engine.add_save(save_watcher, request.session['id']) empires = [{ 'id': empire_id, 'name': save['snaps'][-1]['empires'][empire_id]['name'], 'player': save['snaps'][-1]['empires'][empire_id]['player_name'] } for empire_id in save['snaps'][-1]['empires']] return JsonResponse({'file': save_watcher.name(), 'empires': empires}) except Exception as err: traceback.print_tb(err.__traceback__) return _make_error(err)
def get_saves(request): try: sessions.register_session(request.session) save_files = finder.find_saves() saves = [] for save in save_files: try: if save.valid(): saves.append({ 'meta': parser.load_meta(save.get_file(False)), 'file': save.name(), 'time': save.time(), 'history': save.has_history(), 'active': engine.save_active(save.name()) }) except: traceback.print_exc() saves = [{ 'file': save['file'], 'history': save['history'], 'active': save['active'], 'name': save['meta']['name'], 'gameDate': save['meta']['date'], 'fileDatetime': datetime.fromtimestamp(save['time']) } for save in saves] return JsonResponse({'saves': saves}) except Exception as err: traceback.print_tb(err.__traceback__) return _make_error(err)
def get_latest_snap(request): try: sessions.register_session(request.session) parsed = json.loads(request.body) if 'file' not in parsed: return _make_error('"file" parameter not set in POST') if 'empire' not in parsed: return _make_error('"empire" parameter not set in POST') save_watcher = finder.get_save(parsed['file']) if not save_watcher or not save_watcher.valid(): return _make_error(f'Invalid save file: {parsed["file"]}') empire = parsed['empire'] save = engine.get_save(save_watcher, request.session['id'], True) if not save: return _make_error(f'Invalid save: {save_watcher.name()}') if empire not in save['snaps'][-1]['empires']: return _make_error( f'Empire {empire} not in save {save_watcher.name()}') sessions.set_session_empire(request.session['id'], empire) return JsonResponse({ 'file': save_watcher.name(), 'empire': empire, 'latest_snap': save['snaps'][-1]['empires'][empire] }) except Exception as err: return _make_error(f'Bad request body: {repr(err)}')
def index(request): request.session.set_expiry(300) sessions.register_session(request.session) try: with open(os.path.join(settings.STATIC_ROOT, 'index.html')) as f: return HttpResponse(f.read()) except: return HttpResponse('React frontend not found', status=501)
def connect(self): if 'id' not in self.scope['session']: self.id = sessions.register_session(self.scope['session']) else: self.id = self.scope['session']['id'] print(f'Session {self.id} connected') sessions.set_session_socket(self.id, self) self.accept()
def wait_save(request): try: sessions.register_session(request.session) save_watcher = finder.wait_for_save() if not save_watcher: return _make_error('No save created or saved while waiting') if not save_watcher.valid(): return _make_error('No valid save found') meta = parser.load_meta(save_watcher.get_file(True)) return JsonResponse({ 'save': { 'file': save_watcher.name(), 'name': meta['name'], 'gameDate': meta['date'], 'fileDatetime': datetime.fromtimestamp(save_watcher.time()) } }) except Exception as err: traceback.print_tb(err.__traceback__) return _make_error(err)