Implement retire.
This commit is contained in:
parent
aca4e7acb1
commit
91523a80a1
@ -279,8 +279,8 @@ pub async fn thread_system(mut app:App, bus:Bus<protocol::QRPacket>)
|
|||||||
// - IsLive must have both users connected to the session.
|
// - IsLive must have both users connected to the session.
|
||||||
|
|
||||||
let mut valid = match request.game_state {
|
let mut valid = match request.game_state {
|
||||||
1 => session.p_dawn.user.is_none() || session.p_dusk.user.is_none(),
|
1 => !session.game.complete && (session.p_dawn.user.is_none() || session.p_dusk.user.is_none()),
|
||||||
2 => session.p_dawn.user.is_some() && session.p_dusk.user.is_some(),
|
2 => !session.game.complete && (session.p_dawn.user.is_some() && session.p_dusk.user.is_some()),
|
||||||
3 => session.game.complete,
|
3 => session.game.complete,
|
||||||
_ => true,
|
_ => true,
|
||||||
};
|
};
|
||||||
@ -495,8 +495,12 @@ pub async fn thread_system(mut app:App, bus:Bus<protocol::QRPacket>)
|
|||||||
};
|
};
|
||||||
|
|
||||||
if let Some(session) = app.sessions.get_mut(&request.token) {
|
if let Some(session) = app.sessions.get_mut(&request.token) {
|
||||||
if !session.game.complete {
|
if !session.game.complete && (session.p_dawn.user.is_some() && session.p_dusk.user.is_some()) {
|
||||||
|
if (user_id == session.p_dawn.user && session.game.turn & 1 == 0)
|
||||||
|
|| (user_id == session.p_dusk.user && session.game.turn & 1 == 1) {
|
||||||
|
|
||||||
session.game.process(&play).ok();
|
session.game.process(&play).ok();
|
||||||
|
app.filesystem.session_history_push(session.id, play).ok();
|
||||||
|
|
||||||
for (cid, _) in session.get_connections() {
|
for (cid, _) in session.get_connections() {
|
||||||
packets.push(QRPacket::new(
|
packets.push(QRPacket::new(
|
||||||
@ -510,6 +514,7 @@ pub async fn thread_system(mut app:App, bus:Bus<protocol::QRPacket>)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for packet in packets {
|
for packet in packets {
|
||||||
app.send_response(packet).await;
|
app.send_response(packet).await;
|
||||||
|
@ -131,6 +131,16 @@ pub async fn handle_ws(ws:WebSocketStream<TokioIo<Upgraded>>, args:HttpServiceAr
|
|||||||
).ok();
|
).ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CODE_SESSION_RETIRE => match PacketSessionRetire::decode(&data, &mut index) {
|
||||||
|
Ok(packet) => {
|
||||||
|
args.bus.send(
|
||||||
|
bus_ds,
|
||||||
|
QRPacket::new(conn_id, QRPacketData::QSessionRetire(packet))
|
||||||
|
).ok();
|
||||||
|
}
|
||||||
|
Err(_) => { println!("error: packet decode failed."); }
|
||||||
|
}
|
||||||
|
|
||||||
CODE_GAME_STATE => match PacketGameState::decode(&data, &mut index) {
|
CODE_GAME_STATE => match PacketGameState::decode(&data, &mut index) {
|
||||||
Ok(packet) => {
|
Ok(packet) => {
|
||||||
args.bus.send(
|
args.bus.send(
|
||||||
|
@ -47,8 +47,8 @@ impl Packet for PacketGamePlay {
|
|||||||
{
|
{
|
||||||
let mut data = 0;
|
let mut data = 0;
|
||||||
data |= self.play.source as u16;
|
data |= self.play.source as u16;
|
||||||
data |= (self.play.from as u16) << 1;
|
data |= (self.play.from as u16) << 4;
|
||||||
data |= (self.play.to as u16) << 7;
|
data |= (self.play.to as u16) << 10;
|
||||||
[
|
[
|
||||||
pack_u16(self.status),
|
pack_u16(self.status),
|
||||||
pack_u16(self.turn),
|
pack_u16(self.turn),
|
||||||
|
@ -211,7 +211,7 @@ impl FileSystem {
|
|||||||
|
|
||||||
pub fn session_history_push(&mut self, id:u32, history:Play) -> Result<(),()>
|
pub fn session_history_push(&mut self, id:u32, history:Play) -> Result<(),()>
|
||||||
{
|
{
|
||||||
let play_data :u16 = (history.source as u16) | ((history.from as u16) << 1) | ((history.to as u16) << 7);
|
let play_data :u16 = (history.source as u16) | ((history.from as u16) << 4) | ((history.to as u16) << 10);
|
||||||
|
|
||||||
let bucket_index = id & !HANDLE_BUCKET_MASK;
|
let bucket_index = id & !HANDLE_BUCKET_MASK;
|
||||||
let dir_index = id & HANDLE_BUCKET_MASK;
|
let dir_index = id & HANDLE_BUCKET_MASK;
|
||||||
@ -266,9 +266,9 @@ impl FileSystem {
|
|||||||
file.read_exact(&mut buffer).map_err(|_| ())?;
|
file.read_exact(&mut buffer).map_err(|_| ())?;
|
||||||
let data = unpack_u16(&buffer, &mut 0);
|
let data = unpack_u16(&buffer, &mut 0);
|
||||||
result.push(Play {
|
result.push(Play {
|
||||||
source:(data & 1) as u8,
|
source:(data & 0xF) as u8,
|
||||||
from:((data >> 1) & 0x3F) as u8,
|
from:((data >> 4) & 0x3F) as u8,
|
||||||
to:((data >> 7) & 0x3F) as u8,
|
to:((data >> 10) & 0x3F) as u8,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -754,13 +754,13 @@ const INTERFACE = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
uninit() {
|
uninit() {
|
||||||
|
if(INTERFACE_DATA !== null) {
|
||||||
if(INTERFACE_DATA.online) {
|
if(INTERFACE_DATA.online) {
|
||||||
MESSAGE_COMPOSE([
|
MESSAGE_COMPOSE([
|
||||||
PACK.u16(OpCode.SessionLeave),
|
PACK.u16(OpCode.SessionLeave),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(INTERFACE_DATA !== null) {
|
|
||||||
MAIN.removeChild(INTERFACE_DATA.canvas);
|
MAIN.removeChild(INTERFACE_DATA.canvas);
|
||||||
INTERFACE_DATA = null;
|
INTERFACE_DATA = null;
|
||||||
}
|
}
|
||||||
@ -782,6 +782,8 @@ const INTERFACE = {
|
|||||||
GAME_DATA.turn = data.turn;
|
GAME_DATA.turn = data.turn;
|
||||||
INTERFACE_DATA.play = data.play;
|
INTERFACE_DATA.play = data.play;
|
||||||
|
|
||||||
|
console.log(data.play.source);
|
||||||
|
|
||||||
if(INTERFACE_DATA.play.source == 2) {
|
if(INTERFACE_DATA.play.source == 2) {
|
||||||
GAME_DATA.state.code = 2;
|
GAME_DATA.state.code = 2;
|
||||||
}
|
}
|
||||||
@ -833,7 +835,7 @@ const INTERFACE = {
|
|||||||
retire() {
|
retire() {
|
||||||
if(INTERFACE_DATA.online) {
|
if(INTERFACE_DATA.online) {
|
||||||
MESSAGE_COMPOSE([
|
MESSAGE_COMPOSE([
|
||||||
OpCode.SessionRetire,
|
PACK.u16(OpCode.SessionRetire),
|
||||||
INTERFACE_DATA.token,
|
INTERFACE_DATA.token,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
@ -434,35 +434,45 @@ const SCENES = {
|
|||||||
|
|
||||||
UI.mainmenu();
|
UI.mainmenu();
|
||||||
|
|
||||||
|
let left_buttons = [ ];
|
||||||
|
|
||||||
UI.mainnav(
|
UI.mainnav(
|
||||||
[ ],
|
left_buttons,
|
||||||
[
|
[
|
||||||
UI.div([UI.text("0 - 0 of 0")]),
|
UI.div([UI.text("0 - 0 of 0")]),
|
||||||
UI.button("◀", null),
|
UI.button("◀", null),
|
||||||
UI.button("▶", null),
|
UI.button("▶", null),
|
||||||
|
UI.button("Refresh", null),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
let table = document.createElement("table");
|
let table = document.createElement("table");
|
||||||
table.setAttribute("id", "content");
|
table.setAttribute("id", "content");
|
||||||
|
table.setAttribute("class", "list");
|
||||||
MAIN.appendChild(table);
|
MAIN.appendChild(table);
|
||||||
|
|
||||||
MAIN.setAttribute("class", "list");
|
|
||||||
|
|
||||||
SCENE.refresh();
|
SCENE.refresh();
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
refresh() {
|
refresh() {
|
||||||
|
MESSAGE_SESSION_LIST(0, 3, false, false);
|
||||||
},
|
},
|
||||||
message(code, data) {
|
message(code, data) {
|
||||||
if(code == OpCode.SessionList) {
|
switch(code) {
|
||||||
|
case OpCode.SessionList: {
|
||||||
let table = document.getElementById("content");
|
let table = document.getElementById("content");
|
||||||
UI.clear(table);
|
UI.clear(table);
|
||||||
|
|
||||||
if(data !== null) {
|
if(data !== null) {
|
||||||
table.appendChild(UI.session_table(data.records));
|
table.appendChild(UI.session_table(data.records));
|
||||||
}
|
}
|
||||||
|
} break;
|
||||||
|
case OpCode.SessionCreate:
|
||||||
|
case OpCode.SessionJoin: {
|
||||||
|
if(data.status == Status.Ok) {
|
||||||
|
LOAD(SCENES.Game, data);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
disconnect() {
|
disconnect() {
|
||||||
|
@ -230,9 +230,9 @@ function MESSAGE(event) {
|
|||||||
// Last Play
|
// Last Play
|
||||||
result = UNPACK.u16(bytes, index);
|
result = UNPACK.u16(bytes, index);
|
||||||
index = result.index;
|
index = result.index;
|
||||||
data.play.source = result.data & 1;
|
data.play.source = result.data & 0xF;
|
||||||
data.play.from = (result.data >> 1) & 0x3F;
|
data.play.from = (result.data >> 4) & 0x3F;
|
||||||
data.play.to = (result.data >> 7) & 0x3F;
|
data.play.to = (result.data >> 10) & 0x3F;
|
||||||
|
|
||||||
// Turn
|
// Turn
|
||||||
result = UNPACK.u16(bytes, index);
|
result = UNPACK.u16(bytes, index);
|
||||||
@ -314,9 +314,9 @@ function MESSAGE(event) {
|
|||||||
// Play description
|
// Play description
|
||||||
result = UNPACK.u16(bytes, index);
|
result = UNPACK.u16(bytes, index);
|
||||||
index = result.index;
|
index = result.index;
|
||||||
data.play.source = result.data & 1;
|
data.play.source = result.data & 0xF;
|
||||||
data.play.from = (result.data >> 1) & 0x3F;
|
data.play.from = (result.data >> 4) & 0x3F;
|
||||||
data.play.to = (result.data >> 7) & 0x3F;
|
data.play.to = (result.data >> 10) & 0x3F;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user