Fix missing Resume button on refresh.
This commit is contained in:
parent
aca6961036
commit
9dfefd70d0
@ -471,6 +471,12 @@ pub async fn thread_system(mut app:App, bus:Bus<protocol::QRPacket>)
|
|||||||
// Verify that session exists
|
// Verify that session exists
|
||||||
if let Some(session) = app.sessions.get_mut(&request.token) {
|
if let Some(session) = app.sessions.get_mut(&request.token) {
|
||||||
|
|
||||||
|
if user_id == Some(session.p_dawn.user) {
|
||||||
|
response.player = 1;
|
||||||
|
} else if user_id == Some(session.p_dusk.user) {
|
||||||
|
response.player = 2;
|
||||||
|
}
|
||||||
|
|
||||||
// Join game as player
|
// Join game as player
|
||||||
if if request.join {
|
if if request.join {
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
app::session::SessionToken,
|
app::session::SessionToken,
|
||||||
util::pack::pack_u16,
|
util::pack::{pack_u8, pack_u16},
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::Packet;
|
use super::Packet;
|
||||||
@ -41,6 +41,7 @@ impl Packet for PacketSessionView {
|
|||||||
pub struct PacketSessionViewResponse {
|
pub struct PacketSessionViewResponse {
|
||||||
pub status:u16,
|
pub status:u16,
|
||||||
pub token:SessionToken,
|
pub token:SessionToken,
|
||||||
|
pub player:u8,
|
||||||
}
|
}
|
||||||
impl PacketSessionViewResponse {
|
impl PacketSessionViewResponse {
|
||||||
pub fn new() -> Self
|
pub fn new() -> Self
|
||||||
@ -48,6 +49,7 @@ impl PacketSessionViewResponse {
|
|||||||
Self {
|
Self {
|
||||||
status:0,
|
status:0,
|
||||||
token:SessionToken::default(),
|
token:SessionToken::default(),
|
||||||
|
player:0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -56,8 +58,12 @@ impl Packet for PacketSessionViewResponse {
|
|||||||
|
|
||||||
fn encode(&self) -> Vec<u8>
|
fn encode(&self) -> Vec<u8>
|
||||||
{
|
{
|
||||||
|
let mut flags = 0u8;
|
||||||
|
flags |= self.player;
|
||||||
|
|
||||||
[
|
[
|
||||||
pack_u16(self.status),
|
pack_u16(self.status),
|
||||||
|
pack_u8(flags),
|
||||||
self.token.to_vec(),
|
self.token.to_vec(),
|
||||||
].concat()
|
].concat()
|
||||||
}
|
}
|
||||||
|
@ -1072,6 +1072,16 @@ const INTERFACE = {
|
|||||||
} else {
|
} else {
|
||||||
LOAD(SCENES.Browse);
|
LOAD(SCENES.Browse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch(INTERFACE_DATA.mode) {
|
||||||
|
case INTERFACE.Mode.Review:
|
||||||
|
case INTERFACE.Mode.Player: {
|
||||||
|
MESSAGE_COMPOSE([
|
||||||
|
PACK.u16(OpCode.GameState),
|
||||||
|
INTERFACE_DATA.token,
|
||||||
|
]);
|
||||||
|
} break;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
uninit() {
|
uninit() {
|
||||||
@ -1112,23 +1122,6 @@ const INTERFACE = {
|
|||||||
if(data === null) { return; }
|
if(data === null) { return; }
|
||||||
|
|
||||||
switch(code) {
|
switch(code) {
|
||||||
|
|
||||||
case OpCode.SessionView: {
|
|
||||||
if(data.status != Status.Ok) {
|
|
||||||
LOAD(SCENES.Browse);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(INTERFACE_DATA.mode) {
|
|
||||||
case INTERFACE.Mode.Review:
|
|
||||||
case INTERFACE.Mode.Player: {
|
|
||||||
MESSAGE_COMPOSE([
|
|
||||||
PACK.u16(OpCode.GameState),
|
|
||||||
INTERFACE_DATA.token,
|
|
||||||
]);
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case OpCode.GameState: {
|
case OpCode.GameState: {
|
||||||
if(INTERFACE_DATA.mode == INTERFACE.Mode.Player) {
|
if(INTERFACE_DATA.mode == INTERFACE.Mode.Player) {
|
||||||
INTERFACE_DATA.player = data.player;
|
INTERFACE_DATA.player = data.player;
|
||||||
|
@ -91,8 +91,6 @@ const SCENES = {
|
|||||||
case Status.Ok: {
|
case Status.Ok: {
|
||||||
let b64_token = PACK.base64(data.token);
|
let b64_token = PACK.base64(data.token);
|
||||||
let b64_secret = PACK.base64(data.secret);
|
let b64_secret = PACK.base64(data.secret);
|
||||||
console.log(b64_token);
|
|
||||||
console.log(b64_secret);
|
|
||||||
|
|
||||||
sessionStorage.setItem("auth", b64_token);
|
sessionStorage.setItem("auth", b64_token);
|
||||||
sessionStorage.setItem("auth_secret", b64_secret);
|
sessionStorage.setItem("auth_secret", b64_secret);
|
||||||
@ -568,11 +566,43 @@ const SCENES = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
GameLoad:class{
|
||||||
|
constructor() {
|
||||||
|
this.mode = null;
|
||||||
|
this.token = null;
|
||||||
|
this.turn = null;
|
||||||
|
}
|
||||||
|
load(data) {
|
||||||
|
this.mode = data.mode;
|
||||||
|
this.token = data.token;
|
||||||
|
if(data.turn !== undefined) { this.turn = data.turn; }
|
||||||
|
MESSAGE_SESSION_VIEW(this.token, this.mode == INTERFACE.Mode.Player);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
message(code, data) {
|
||||||
|
switch(code) {
|
||||||
|
case OpCode.SessionView: {
|
||||||
|
if(data.status == Status.Ok) {
|
||||||
|
LOAD(SCENES.Game, {
|
||||||
|
mode:this.mode,
|
||||||
|
token:this.token,
|
||||||
|
view:data,
|
||||||
|
turn:this.turn,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
LOAD(SCENES.Browse);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
Game:class{
|
Game:class{
|
||||||
constructor() {
|
constructor() {
|
||||||
this.game = null;
|
this.game = null;
|
||||||
}
|
}
|
||||||
load(data) {
|
load(data) {
|
||||||
|
// Bottom Buttons
|
||||||
let buttons_bottom = [ ];
|
let buttons_bottom = [ ];
|
||||||
if(data.mode != INTERFACE.Mode.Review) {
|
if(data.mode != INTERFACE.Mode.Review) {
|
||||||
let button_resign = UI.button(LANG("resign"), () => { INTERFACE.resign(); });
|
let button_resign = UI.button(LANG("resign"), () => { INTERFACE.resign(); });
|
||||||
@ -583,21 +613,20 @@ const SCENES = {
|
|||||||
LOAD(SCENES.Browse);
|
LOAD(SCENES.Browse);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
// Standard Top Buttons
|
||||||
let buttons_top = [
|
let buttons_top = [
|
||||||
UI.button(LANG("rotate"), () => { INTERFACE.rotate(); }),
|
UI.button(LANG("rotate"), () => { INTERFACE.rotate(); }),
|
||||||
UI.button(LANG("mirror"), () => { INTERFACE.mirror(); }),
|
UI.button(LANG("mirror"), () => { INTERFACE.mirror(); }),
|
||||||
];
|
];
|
||||||
|
|
||||||
if(data.player != 0) {
|
// Resume / Review Buttons
|
||||||
|
if(data.view.player != 0) {
|
||||||
if(data.mode == INTERFACE.Mode.Review) {
|
if(data.mode == INTERFACE.Mode.Review) {
|
||||||
let callback_resume = function() {
|
let callback_resume = function() {
|
||||||
LOAD(SCENES.Game, {
|
LOAD(SCENES.GameLoad, {
|
||||||
token:this.token,
|
token:this.token,
|
||||||
player:this.player,
|
|
||||||
turn:-1,
|
|
||||||
mode:INTERFACE.Mode.Player,
|
mode:INTERFACE.Mode.Player,
|
||||||
});
|
});
|
||||||
MESSAGE_SESSION_VIEW(this.token, true);
|
|
||||||
}
|
}
|
||||||
callback_resume = callback_resume.bind({
|
callback_resume = callback_resume.bind({
|
||||||
token: data.token,
|
token: data.token,
|
||||||
@ -607,13 +636,10 @@ const SCENES = {
|
|||||||
buttons_top.push(UI.button(LANG("resume"), callback_resume));
|
buttons_top.push(UI.button(LANG("resume"), callback_resume));
|
||||||
} else {
|
} else {
|
||||||
let callback_review = function() {
|
let callback_review = function() {
|
||||||
LOAD(SCENES.Game, {
|
LOAD(SCENES.GameLoad, {
|
||||||
token:this.token,
|
token:this.token,
|
||||||
turn:-1,
|
|
||||||
player:this.player,
|
|
||||||
mode:INTERFACE.Mode.Review,
|
mode:INTERFACE.Mode.Review,
|
||||||
});
|
});
|
||||||
MESSAGE_SESSION_VIEW(this.token, false);
|
|
||||||
}
|
}
|
||||||
callback_review = callback_review.bind({
|
callback_review = callback_review.bind({
|
||||||
token: data.token,
|
token: data.token,
|
||||||
@ -624,6 +650,7 @@ const SCENES = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Practice Button
|
||||||
if(data.mode == INTERFACE.Mode.Review) {
|
if(data.mode == INTERFACE.Mode.Review) {
|
||||||
let play_callback = function() {
|
let play_callback = function() {
|
||||||
LOAD(SCENES.GamePractice, {
|
LOAD(SCENES.GamePractice, {
|
||||||
@ -637,11 +664,12 @@ const SCENES = {
|
|||||||
token: data.token,
|
token: data.token,
|
||||||
player: data.player,
|
player: data.player,
|
||||||
});
|
});
|
||||||
buttons_top.push(UI.button(LANG("play"), play_callback));
|
buttons_top.push(UI.button(LANG("practice"), play_callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
UI.nav(buttons_top, buttons_bottom);
|
UI.nav(buttons_top, buttons_bottom);
|
||||||
|
|
||||||
|
// Turn Indicators, Scroll Bar
|
||||||
if(data.mode == INTERFACE.Mode.Review) {
|
if(data.mode == INTERFACE.Mode.Review) {
|
||||||
let ind_turn = UI.div([UI.text("0 / 0")]);
|
let ind_turn = UI.div([UI.text("0 / 0")]);
|
||||||
ind_turn.setAttribute("id", "indicator-turn");
|
ind_turn.setAttribute("id", "indicator-turn");
|
||||||
@ -664,13 +692,14 @@ const SCENES = {
|
|||||||
MAIN.appendChild(UI.div([ slider ], "turn-slider-padding"));
|
MAIN.appendChild(UI.div([ slider ], "turn-slider-padding"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Canvas
|
||||||
let canvas = document.createElement("canvas");
|
let canvas = document.createElement("canvas");
|
||||||
canvas.setAttribute("id", "game");
|
canvas.setAttribute("id", "game");
|
||||||
MAIN.appendChild(canvas);
|
MAIN.appendChild(canvas);
|
||||||
|
|
||||||
|
// Interface
|
||||||
INTERFACE.init(data.token, data.mode);
|
INTERFACE.init(data.token, data.mode);
|
||||||
console.log(data.turn);
|
if(data.turn !== null) {
|
||||||
if(data.turn != -1) {
|
|
||||||
INTERFACE_DATA.replay_turn = data.turn;
|
INTERFACE_DATA.replay_turn = data.turn;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -682,8 +711,6 @@ const SCENES = {
|
|||||||
}
|
}
|
||||||
message(code, data) {
|
message(code, data) {
|
||||||
switch(code) {
|
switch(code) {
|
||||||
case OpCode.SessionCreate:
|
|
||||||
case OpCode.SessionView:
|
|
||||||
case OpCode.GameState:
|
case OpCode.GameState:
|
||||||
case OpCode.GamePlay: {
|
case OpCode.GamePlay: {
|
||||||
INTERFACE.message(code, data);
|
INTERFACE.message(code, data);
|
||||||
@ -709,13 +736,11 @@ const SCENES = {
|
|||||||
if(data !== null) {
|
if(data !== null) {
|
||||||
if(data.history.length > 0) {
|
if(data.history.length > 0) {
|
||||||
let callback_review = function() {
|
let callback_review = function() {
|
||||||
LOAD(SCENES.Game, {
|
LOAD(SCENES.GameLoad, {
|
||||||
token:this.token,
|
token:this.token,
|
||||||
turn:INTERFACE_DATA.history_begin.length,
|
|
||||||
player:this.player,
|
|
||||||
mode:INTERFACE.Mode.Review,
|
mode:INTERFACE.Mode.Review,
|
||||||
|
turn:INTERFACE_DATA.history_begin.length,
|
||||||
});
|
});
|
||||||
MESSAGE_SESSION_VIEW(this.token, false);
|
|
||||||
}
|
}
|
||||||
callback_review = callback_review.bind({
|
callback_review = callback_review.bind({
|
||||||
token: data.token,
|
token: data.token,
|
||||||
@ -962,12 +987,10 @@ const SCENES = {
|
|||||||
|
|
||||||
case OpCode.ChallengeAnswer: {
|
case OpCode.ChallengeAnswer: {
|
||||||
if(data.status == Status.Ok) {
|
if(data.status == Status.Ok) {
|
||||||
|
LOAD(SCENES.GameLoad, {
|
||||||
LOAD(SCENES.Game, {
|
token:this.token,
|
||||||
token:data.token,
|
|
||||||
mode:INTERFACE.Mode.Player,
|
mode:INTERFACE.Mode.Player,
|
||||||
});
|
});
|
||||||
MESSAGE_SESSION_VIEW(data.token, true);
|
|
||||||
} else {
|
} else {
|
||||||
SCENE.refresh();
|
SCENE.refresh();
|
||||||
}
|
}
|
||||||
@ -1009,13 +1032,10 @@ function LOAD_URL() {
|
|||||||
case "game": {
|
case "game": {
|
||||||
if(parts[2]) {
|
if(parts[2]) {
|
||||||
let token = UNPACK.base64(parts[2] + "=");
|
let token = UNPACK.base64(parts[2] + "=");
|
||||||
LOAD(SCENES.Game, {
|
LOAD(SCENES.GameLoad, {
|
||||||
token:token,
|
token:token,
|
||||||
player:0,
|
|
||||||
turn:-1,
|
|
||||||
mode:INTERFACE.Mode.Review,
|
mode:INTERFACE.Mode.Review,
|
||||||
});
|
});
|
||||||
MESSAGE_SESSION_VIEW(token, false);
|
|
||||||
} else {
|
} else {
|
||||||
LOAD(SCENES.Browse);
|
LOAD(SCENES.Browse);
|
||||||
}
|
}
|
||||||
|
@ -139,7 +139,7 @@ function MESSAGE(event) {
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
case OpCode.SessionList: {
|
case OpCode.SessionList: {
|
||||||
console.log("RECV Session list");
|
console.log("RECV SessionList");
|
||||||
|
|
||||||
if(bytes.length - index >= 2) {
|
if(bytes.length - index >= 2) {
|
||||||
data = {
|
data = {
|
||||||
@ -216,18 +216,27 @@ function MESSAGE(event) {
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
case OpCode.SessionView: {
|
case OpCode.SessionView: {
|
||||||
console.log("RECV SessionCreate/Join");
|
console.log("RECV SessionView");
|
||||||
|
|
||||||
if(bytes.length - index == 10) {
|
if(bytes.length - index == 11) {
|
||||||
data = {
|
data = {
|
||||||
status:0,
|
status:0,
|
||||||
|
player:0,
|
||||||
token:new Uint8Array(8),
|
token:new Uint8Array(8),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Status
|
||||||
result = UNPACK.u16(bytes, index);
|
result = UNPACK.u16(bytes, index);
|
||||||
index = result.index;
|
index = result.index;
|
||||||
data.status = result.data;
|
data.status = result.data;
|
||||||
|
|
||||||
|
// Flags
|
||||||
|
result = UNPACK.u8(bytes, index);
|
||||||
|
index = result.index;
|
||||||
|
let flags = result.data;
|
||||||
|
data.player = flags & 3;
|
||||||
|
|
||||||
|
// Token
|
||||||
for(let i = 0; i < 8; ++i) { data.token[i] = bytes[index++]; }
|
for(let i = 0; i < 8; ++i) { data.token[i] = bytes[index++]; }
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
26
www/js/ui.js
26
www/js/ui.js
@ -189,31 +189,23 @@ const UI = {
|
|||||||
for(let r = 0; r < records.length; ++r) {
|
for(let r = 0; r < records.length; ++r) {
|
||||||
let buttons = [ ];
|
let buttons = [ ];
|
||||||
let join_callback = function() {
|
let join_callback = function() {
|
||||||
LOAD(SCENES.Game, {
|
LOAD(SCENES.GameLoad, {
|
||||||
token:this.token,
|
token:this.token,
|
||||||
player:this.player,
|
|
||||||
turn:-1,
|
|
||||||
mode:INTERFACE.Mode.Player,
|
mode:INTERFACE.Mode.Player,
|
||||||
});
|
});
|
||||||
MESSAGE_SESSION_VIEW(this.token, true);
|
|
||||||
};
|
};
|
||||||
join_callback = join_callback.bind({
|
join_callback = join_callback.bind({
|
||||||
token: records[r].token,
|
token: records[r].token,
|
||||||
player: records[r].player,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
let spectate_callback = function() {
|
let spectate_callback = function() {
|
||||||
LOAD(SCENES.Game, {
|
LOAD(SCENES.GameLoad, {
|
||||||
token:this.token,
|
token:this.token,
|
||||||
player:this.player,
|
|
||||||
turn:-1,
|
|
||||||
mode:INTERFACE.Mode.Review,
|
mode:INTERFACE.Mode.Review,
|
||||||
});
|
});
|
||||||
MESSAGE_SESSION_VIEW(this.token, false);
|
|
||||||
};
|
};
|
||||||
spectate_callback = spectate_callback.bind({
|
spectate_callback = spectate_callback.bind({
|
||||||
token: records[r].token,
|
token: records[r].token,
|
||||||
player: records[r].player,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if(records[r].player != 0) {
|
if(records[r].player != 0) {
|
||||||
@ -255,25 +247,19 @@ const UI = {
|
|||||||
let buttons = [ ];
|
let buttons = [ ];
|
||||||
let join_callback = function() {
|
let join_callback = function() {
|
||||||
SCENE_FORWARD = SCENE;
|
SCENE_FORWARD = SCENE;
|
||||||
LOAD(SCENES.Game, {
|
LOAD(SCENES.GameLoad, {
|
||||||
token:this.token,
|
token:this.token,
|
||||||
player:0,
|
|
||||||
turn:-1,
|
|
||||||
mode:INTERFACE.Mode.Player,
|
mode:INTERFACE.Mode.Player,
|
||||||
});
|
});
|
||||||
MESSAGE_SESSION_VIEW(this.token, true);
|
|
||||||
};
|
};
|
||||||
join_callback = join_callback.bind({token: records[r].token});
|
join_callback = join_callback.bind({token: records[r].token});
|
||||||
|
|
||||||
let spectate_callback = function() {
|
let spectate_callback = function() {
|
||||||
SCENE_FORWARD = SCENE;
|
SCENE_FORWARD = SCENE;
|
||||||
LOAD(SCENES.Game, {
|
LOAD(SCENES.GameLoad, {
|
||||||
token:this.token,
|
token:this.token,
|
||||||
player:0,
|
|
||||||
turn:-1,
|
|
||||||
mode:INTERFACE.Mode.Review,
|
mode:INTERFACE.Mode.Review,
|
||||||
});
|
});
|
||||||
MESSAGE_SESSION_VIEW(this.token, false);
|
|
||||||
};
|
};
|
||||||
spectate_callback = spectate_callback.bind({token: records[r].token});
|
spectate_callback = spectate_callback.bind({token: records[r].token});
|
||||||
|
|
||||||
@ -348,10 +334,8 @@ const UI = {
|
|||||||
let buttons = [ ];
|
let buttons = [ ];
|
||||||
let view_callback = function() {
|
let view_callback = function() {
|
||||||
SCENE_FORWARD = SCENE;
|
SCENE_FORWARD = SCENE;
|
||||||
LOAD(SCENES.Game, {
|
LOAD(SCENES.GameLoad, {
|
||||||
token:this.token,
|
token:this.token,
|
||||||
player:0,
|
|
||||||
turn:-1,
|
|
||||||
mode:INTERFACE.Mode.Review,
|
mode:INTERFACE.Mode.Review,
|
||||||
});
|
});
|
||||||
MESSAGE_SESSION_VIEW(this.token, false);
|
MESSAGE_SESSION_VIEW(this.token, false);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user