Skip to content
Snippets Groups Projects
Commit d8517aee authored by Nils G.'s avatar Nils G.
Browse files

Safe submits in /game/roles persistently in player table

parent e2f1e391
No related branches found
No related tags found
No related merge requests found
......@@ -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"}
......
......@@ -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)
)
......
......@@ -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":
......
......@@ -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}}
......
......@@ -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:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment