from parameter_util import JSON_BODY, JSON_CONTAINS from http_util import FAIL, CODE_JSON, CODE_MISSING, CODE_SEMANTIC, CODE_GONE, CODE_CONFLICT, GET_HOST from room_util import ROOM_GET from gluon.contrib.websocket_messaging import websocket_send import json def start(): parameters = JSON_BODY(request) if parameters == None: return(FAIL(CODE_JSON)) if not JSON_CONTAINS(parameters, [('room_id', int), ('room_pw', str), ('roles', dict)]): return(FAIL(CODE_MISSING)) room_id = parameters['room_id'] room_pw = parameters['room_pw'] roles = parameters['roles'] room_record = ROOM_GET(room_id, room_pw) if not room_record: return(FAIL(CODE_SEMANTIC)) if room_record.started: return(FAIL(CODE_CONFLICT)) if room_record.closed: return(FAIL(CODE_GONE)) roles = json.dumps(roles) db(db.Room.id == room_record.id).update(started=True, roles=roles) websocket_send('http://' + GET_HOST() + ':8888', roles, 'mykey', room_record.code) json_response = {"status": "success"} return(response.json(json_response))