Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)}')
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
    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()
Ejemplo n.º 6
0
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)