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(): ...@@ -63,13 +63,17 @@ def roles():
return(FAIL(CODE_GONE)) return(FAIL(CODE_GONE))
players = PLAYERS_GET(room_record, True) players = PLAYERS_GET(room_record, True)
server_rolechange = {}
client_rolechange = {}
#===========================================
#Parse Roles for each player
change = {}
for player in players: for player in players:
playerid = str(player["id"]) playerid = str(player["id"])
if not playerid in user_roles: if not playerid in user_roles:
#We do not have a role change for this player
continue continue
definition = user_roles[playerid] definition = user_roles[playerid]
...@@ -77,19 +81,23 @@ def roles(): ...@@ -77,19 +81,23 @@ def roles():
if not isinstance(definition, dict): if not isinstance(definition, dict):
return(FAIL(CODE_MISSING)) return(FAIL(CODE_MISSING))
if not JSON_CONTAINS(definition, [("role", str)]): if not JSON_CONTAINS(definition, [("role", str), ("submits", list)]):
return(FAIL(CODE_MISSING)) return(FAIL(CODE_MISSING))
client_rolechange[player["uid"]] = {"role": definition["role"]} for submit in definition["submits"]:
if not isinstance(submit, dict):
if player["role"] != definition["role"]: return(FAIL(CODE_MISSING))
server_rolechange[player["uid"]] = definition["role"]
for uid in server_rolechange: change[player["uid"]] = definition
db(db.Player.id == uid).update(role=server_rolechange[uid]) #===========================================
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) WEBSOCKET_SEND(room_record, "role", websocket_response)
json_response = {"status": "success"} json_response = {"status": "success"}
......
...@@ -4,6 +4,7 @@ db.define_table( ...@@ -4,6 +4,7 @@ db.define_table(
Field('hashcode', 'string', notnull=True), Field('hashcode', 'string', notnull=True),
Field('name', 'string', notnull=True), Field('name', 'string', notnull=True),
Field('role', 'string', default="idle"), Field('role', 'string', default="idle"),
Field('submits', 'string', default=base64.standard_b64encode(b'[]'), notnull=True),
Field('creation', 'datetime', default=request.now, notnull=True) Field('creation', 'datetime', default=request.now, notnull=True)
) )
......
...@@ -47,6 +47,8 @@ function renderRole(_definition, _roleIdle) { ...@@ -47,6 +47,8 @@ function renderRole(_definition, _roleIdle) {
$("#game_content").html(""); $("#game_content").html("");
var currentSubmit = submits[submitcount];
for(var index in elements) { for(var index in elements) {
var element = elements[index]; var element = elements[index];
...@@ -56,6 +58,14 @@ function renderRole(_definition, _roleIdle) { ...@@ -56,6 +58,14 @@ function renderRole(_definition, _roleIdle) {
var name = element["name"]; var name = element["name"];
var value = element["value"]; var value = element["value"];
if(currentSubmit){
for(var varname in currentSubmit){
while(value.indexOf("$"+varname) != -1){
value = value.replace("$"+varname, currentSubmit[varname]);
}
}
}
var e; var e;
switch(type) { switch(type) {
case "text": case "text":
......
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
var playerid = "{{=player_record.id}}"; var playerid = "{{=player_record.id}}";
var role = "{{=player_record.role}}"; var role = "{{=player_record.role}}";
var roles = JSON.parse(atob('{{=XML(room_record.roles)}}')); var roles = JSON.parse(atob('{{=XML(room_record.roles)}}'));
var submits = JSON.parse(atob('{{=XML(player_record.submits)}}'));;
var submitcount = 0;
</script> </script>
{{block game_js}}{{end game_js}} {{block game_js}}{{end game_js}}
......
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
role_definition = JSON.parse(atob(data)); role_definition = JSON.parse(atob(data));
if(playerid in role_definition) { if(playerid in role_definition) {
role = role_definition[playerid]["role"]; role = role_definition[playerid]["role"];
submits = role_definition[playerid]["submits"];
submitcount = 0;
} }
break; break;
default: 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