diff --git a/server/src/main.rs b/server/src/main.rs index 3552e9b..072bbe3 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -134,10 +134,10 @@ async fn main() cache.cache_whitespace_minimize("/.html").ok(); cache.cache_file_group("text/css", "/.css", &[ "www/css/main.css", - "www/css/util.css", "www/css/ui.css", "www/css/form.css", "www/css/game.css", + "www/css/util.css", ]).ok(); cache.cache_file_group("text/javascript", "/.js", &[ "www/js/const.js", diff --git a/server/src/manager/data.rs b/server/src/manager/data.rs index 139fe45..631c4a6 100644 --- a/server/src/manager/data.rs +++ b/server/src/manager/data.rs @@ -298,6 +298,7 @@ pub async fn thread_system(mut app:App, bus:Bus) if valid { let is_player = user_id.is_some() && (session.p_dawn.user == user_id || session.p_dusk.user == user_id); + let is_turn = is_player && ((session.p_dawn.user == user_id && (session.game.turn & 1) == 0) || ((session.p_dusk.user == user_id && (session.game.turn & 1) == 1))); let dawn_handle = if let Some(uid) = session.p_dawn.user { if let Some(user) = app.get_user_by_id(uid) { @@ -320,7 +321,8 @@ pub async fn thread_system(mut app:App, bus:Bus) turn:session.game.turn, last_move:[0; 3], viewers:session.connections.len() as u32, - player:is_player, + is_player, + is_turn, }); count += 1; @@ -649,7 +651,7 @@ pub async fn thread_system(mut app:App, bus:Bus) if let Some(user_id) = user_id { for (_, uid) in app.user_id.pairs() { let uid = *uid as u32; - + if uid != user_id { if let Some(user) = app.get_user_by_id(uid) { response.records.push(PacketUserListData { diff --git a/server/src/protocol/packet/session_list.rs b/server/src/protocol/packet/session_list.rs index 0c38a8a..f4baa1a 100644 --- a/server/src/protocol/packet/session_list.rs +++ b/server/src/protocol/packet/session_list.rs @@ -59,7 +59,8 @@ pub struct PacketSessionListResponseRecord { pub turn:u16, pub last_move:[u8; 3], pub viewers:u32, - pub player:bool, + pub is_player:bool, + pub is_turn:bool, } #[derive(Clone)] @@ -84,6 +85,13 @@ impl Packet for PacketSessionListResponse { for record in &self.records { let mut chunk = record.token.to_vec(); + let mut flags = 0u32; + flags |= record.is_player as u32; + flags |= (record.is_turn as u32) << 1; + + // Flags + chunk.append(&mut pack_u32(flags)); + // Dawn handle let mut bytes = record.handles[0].as_bytes().to_vec(); chunk.append(&mut pack_u16(bytes.len() as u16)); @@ -104,7 +112,7 @@ impl Packet for PacketSessionListResponse { chunk.append(&mut pack_u32(record.viewers)); // User is player - chunk.append(&mut vec![record.player as u8]); + //chunk.append(&mut vec![record.player as u8]); result.append(&mut chunk); } diff --git a/www/css/ui.css b/www/css/ui.css index fd4fd7c..a6265f9 100644 --- a/www/css/ui.css +++ b/www/css/ui.css @@ -49,6 +49,9 @@ main>table.list td:last-child>button{ border:0; outline:0; } +main>table.list td:last-child>button.highlight { + background-color:#772d43; +} main>table.list td:last-child>button:hover{ background-color:#343434; } @@ -129,7 +132,3 @@ input#turn-slider{ accent-color:#702e2e; } -button#button-resign.warn { - background-color:#471414; - color:#e0e0e0; -} diff --git a/www/css/util.css b/www/css/util.css index 2bafc97..4ea3e23 100644 --- a/www/css/util.css +++ b/www/css/util.css @@ -1 +1,7 @@ span.text-system{color:#909090;} + +button#button-resign.warn { + background-color:#471414; + color:#e0e0e0; +} + diff --git a/www/js/scene.js b/www/js/scene.js index 27752b4..19c289e 100644 --- a/www/js/scene.js +++ b/www/js/scene.js @@ -633,6 +633,8 @@ const SCENES = { Challenge:{ load() { + if(sessionStorage.getItem("auth") === null) return false; + CONTEXT.Data = { page:0, records:[], @@ -708,6 +710,8 @@ const SCENES = { ChallengeList:{ load() { + if(sessionStorage.getItem("auth") === null) return false; + CONTEXT.Data = { page:0, records:[], @@ -788,6 +792,7 @@ const SCENES = { token:data.token, mode:INTERFACE.Mode.Player, }); + MESSAGE_SESSION_VIEW(data.token, true); } else { SCENE.refresh(); } diff --git a/www/js/system.js b/www/js/system.js index 62c5662..8026f2d 100644 --- a/www/js/system.js +++ b/www/js/system.js @@ -138,9 +138,11 @@ function MESSAGE(event) { turn: 0, move: "", viewers: 0, - player: false, + is_player: false, + is_turn: false, }; + // Token if(index <= bytes.length + 8) { for(let i = 0; i < 8; ++i) { record.token[i] = bytes[index]; @@ -148,18 +150,30 @@ function MESSAGE(event) { } } + // Flags + result = UNPACK.u32(bytes, index); + index = result.index; + let flags = result.data; + + record.is_player = (flags & 1) != 0; + record.is_turn = ((flags >> 1) & 1) != 0; + + // Dawn handle result = UNPACK.string(bytes, index); index = result.index; record.dawn = result.data; + // Dusk handle result = UNPACK.string(bytes, index); index = result.index; record.dusk = result.data; + // Turn number result = UNPACK.u16(bytes, index); index = result.index; record.turn = result.data; + // Last move if(index <= bytes.length + 3) { let move = new Uint8Array(3); for(let i = 0; i < 3; ++i) { @@ -169,12 +183,11 @@ function MESSAGE(event) { record.move = UNPACK.move(move); } + // Reviewer count result = UNPACK.u32(bytes, index); index = result.index; record.viewers = result.data; - record.player = bytes[index++] != 0; - data.records.push(record); } } @@ -355,6 +368,7 @@ function MESSAGE(event) { return; } + console.log(data); if(SCENE.message !== undefined) { SCENE.message(code, data) }; } @@ -405,8 +419,6 @@ function MESSAGE_CHALLENGE(handle) { } function MESSAGE_CHALLENGE_ANSWER(handle, answer) { - console.log(handle + " " + answer); - MESSAGE_COMPOSE([ PACK.u16(OpCode.ChallengeAnswer), PACK.u8(+answer), diff --git a/www/js/ui.js b/www/js/ui.js index 25bfb21..34bf748 100644 --- a/www/js/ui.js +++ b/www/js/ui.js @@ -189,8 +189,14 @@ const UI = { }; spectate_callback = spectate_callback.bind({token: records[r].token}); - if(records[r].player) { - buttons.push(UI.button("Resume", join_callback)); + if(records[r].is_player) { + let button_resume = UI.button("Resume", join_callback); + if(records[r].is_turn) { + console.log("HERE"); + button_resume.setAttribute("class", "highlight"); + } + + buttons.push(button_resume); buttons.push(UI.button("Review", spectate_callback)); } else { if(sessionStorage.getItem("auth") !== null && (records[r].dawn == "" || records[r].dusk == "")) { @@ -222,7 +228,7 @@ const UI = { return tbody; }, - session_table_join(records) { + /*session_table_join(records) { let rows = [ ]; for(let r = 0; r < records.length; ++r) { @@ -257,7 +263,7 @@ const UI = { ); return tbody; - }, + },*/ session_table_history(records) { let rows = [ ];