from datetime import datetime import socketio from flask import Flask, render_template sio = socketio.Server() app = Flask(__name__) app.wsgi_app = socketio.WSGIApp(sio, app.wsgi_app) # We request users to send the run number to prevent accidentially getting old requests from a previous run # This maybe will give to much errors from people forgetting to change their number # Remove it? # TODO # Save and read from a file to persist over reboots # Save progress through time during 1 run # Save result of different runs db = {"current_run": 0, "run_start_timer": None, "run_data": {}} @app.route("/") def index(): return render_template('index.html') @app.route("/start_run/") def start_run(run_index): db["current_run"] = run_index starttime = datetime.now() if run_index in db["run_data"]: return "This run is already ran, take another number." db["run_data"][run_index] = {"starttime": starttime, "data": {}} # TODO send start request to the first person in the chain. Probably a zeus part already written as example sio.emit('start_run', run_index) return f'Run {run_index} started at {starttime}' @app.route("/link/start//") def link_start(run, index): if db["current_run"] != run: return "Wrong run number, you are probably behind.", 404 else: run_data = db["run_data"][run]["data"] if index in run_data: return "you already started in this run. Ignoring this request." else: run_data[index] = {"start": datetime.now()} sio.emit('link_start', index) return "Success." @app.route("/link/handoff//") def link_handoff(run, index): if db["current_run"] != run: return "Wrong run number, you are probably behind.", 404 else: link_data = db["run_data"][run]["data"][index] if link_data["handoff"]: return "you already handed off control during this run. Ignoring this request" else: link_data["handoff"] = datetime.now() return "Success." if __name__ == '__main__': app.run(host="0.0.0.0", debug=True)