diff --git a/controllers/game.py b/controllers/game.py index d91ff71869cb99cba4565f9b31746aad55a1e691..358c3369cccee45807b939c75f5494ff93800fb1 100644 --- a/controllers/game.py +++ b/controllers/game.py @@ -63,13 +63,17 @@ def roles(): return(FAIL(CODE_GONE)) players = PLAYERS_GET(room_record, True) - server_rolechange = {} - client_rolechange = {} + + + #=========================================== + #Parse Roles for each player + change = {} for player in players: playerid = str(player["id"]) if not playerid in user_roles: + #We do not have a role change for this player continue definition = user_roles[playerid] @@ -77,19 +81,23 @@ def roles(): if not isinstance(definition, dict): return(FAIL(CODE_MISSING)) - if not JSON_CONTAINS(definition, [("role", str)]): + if not JSON_CONTAINS(definition, [("role", str), ("submits", list)]): return(FAIL(CODE_MISSING)) - client_rolechange[player["uid"]] = {"role": definition["role"]} - - if player["role"] != definition["role"]: - server_rolechange[player["uid"]] = definition["role"] + for submit in definition["submits"]: + if not isinstance(submit, dict): + return(FAIL(CODE_MISSING)) - for uid in server_rolechange: - db(db.Player.id == uid).update(role=server_rolechange[uid]) + change[player["uid"]] = definition + #=========================================== - websocket_response = base64.standard_b64encode(json.dumps(client_rolechange).encode("ascii")).decode("utf-8") + #Update roles and submits on server + for uid in change: + submitString = base64.standard_b64encode(json.dumps(change[uid]["submits"]).encode("ascii")).decode("utf-8") + db(db.Player.id == uid).update(role=change[uid]["role"], submits=submitString) + #Update roles on clients + websocket_response = base64.standard_b64encode(json.dumps(change).encode("ascii")).decode("utf-8") WEBSOCKET_SEND(room_record, "role", websocket_response) json_response = {"status": "success"} diff --git a/models/i_players.py b/models/i_players.py index f9af041c7c62839b176d39a31440e49d10330c4b..2ec12521af5a4714e9716eea29c3d030eb351c21 100644 --- a/models/i_players.py +++ b/models/i_players.py @@ -4,6 +4,7 @@ db.define_table( Field('hashcode', 'string', notnull=True), Field('name', 'string', notnull=True), Field('role', 'string', default="idle"), + Field('submits', 'string', default=base64.standard_b64encode(b'[]'), notnull=True), Field('creation', 'datetime', default=request.now, notnull=True) ) diff --git a/static/renderer/debug.js b/static/renderer/debug.js index 41ab8371a03ff613da9e1889b9df4e9eb5df4d43..13b000673dc99ed924b607c4a1accdedfdd27fcd 100644 --- a/static/renderer/debug.js +++ b/static/renderer/debug.js @@ -47,6 +47,8 @@ function renderRole(_definition, _roleIdle) { $("#game_content").html(""); + var currentSubmit = submits[submitcount]; + for(var index in elements) { var element = elements[index]; @@ -56,6 +58,14 @@ function renderRole(_definition, _roleIdle) { var name = element["name"]; var value = element["value"]; + if(currentSubmit){ + for(var varname in currentSubmit){ + while(value.indexOf("$"+varname) != -1){ + value = value.replace("$"+varname, currentSubmit[varname]); + } + } + } + var e; switch(type) { case "text": diff --git a/views/game/index.html b/views/game/index.html index 6d1720a32ebb43d5b0dc015d81bb2414be36ffcf..74daff17c4ad4ca63a6ed8acc42bd1ece7e99ecc 100644 --- a/views/game/index.html +++ b/views/game/index.html @@ -18,6 +18,8 @@ var playerid = "{{=player_record.id}}"; var role = "{{=player_record.role}}"; var roles = JSON.parse(atob('{{=XML(room_record.roles)}}')); + var submits = JSON.parse(atob('{{=XML(player_record.submits)}}'));; + var submitcount = 0; </script> {{block game_js}}{{end game_js}} diff --git a/views/include/websocket.html b/views/include/websocket.html index 4acf4006ef474a28ab7aeff9b05d9add1375fec2..4453964d79078c8dff5cc739d2e3c0c3e96dd009 100644 --- a/views/include/websocket.html +++ b/views/include/websocket.html @@ -25,6 +25,8 @@ role_definition = JSON.parse(atob(data)); if(playerid in role_definition) { role = role_definition[playerid]["role"]; + submits = role_definition[playerid]["submits"]; + submitcount = 0; } break; default: