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.
|
||||
|
||||
let mut valid = match request.game_state {
|
||||
1 => 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(),
|
||||
1 => !session.game.complete && (session.p_dawn.user.is_none() || session.p_dusk.user.is_none()),
|
||||
2 => !session.game.complete && (session.p_dawn.user.is_some() && session.p_dusk.user.is_some()),
|
||||
3 => session.game.complete,
|
||||
_ => true,
|
||||
};
|
||||
@ -495,18 +495,23 @@ pub async fn thread_system(mut app:App, bus:Bus<protocol::QRPacket>)
|
||||
};
|
||||
|
||||
if let Some(session) = app.sessions.get_mut(&request.token) {
|
||||
if !session.game.complete {
|
||||
session.game.process(&play).ok();
|
||||
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) {
|
||||
|
||||
for (cid, _) in session.get_connections() {
|
||||
packets.push(QRPacket::new(
|
||||
cid,
|
||||
QRPacketData::QGamePlay(PacketGamePlay {
|
||||
status: STATUS_OK,
|
||||
turn: session.game.turn,
|
||||
play,
|
||||
}),
|
||||
));
|
||||
session.game.process(&play).ok();
|
||||
app.filesystem.session_history_push(session.id, play).ok();
|
||||
|
||||
for (cid, _) in session.get_connections() {
|
||||
packets.push(QRPacket::new(
|
||||
cid,
|
||||
QRPacketData::QGamePlay(PacketGamePlay {
|
||||
status: STATUS_OK,
|
||||
turn: session.game.turn,
|
||||
play,
|
||||
}),
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -131,6 +131,16 @@ pub async fn handle_ws(ws:WebSocketStream<TokioIo<Upgraded>>, args:HttpServiceAr
|
||||
).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) {
|
||||
Ok(packet) => {
|
||||
args.bus.send(
|
||||
|
@ -47,8 +47,8 @@ impl Packet for PacketGamePlay {
|
||||
{
|
||||
let mut data = 0;
|
||||
data |= self.play.source as u16;
|
||||
data |= (self.play.from as u16) << 1;
|
||||
data |= (self.play.to as u16) << 7;
|
||||
data |= (self.play.from as u16) << 4;
|
||||
data |= (self.play.to as u16) << 10;
|
||||
[
|
||||
pack_u16(self.status),
|
||||
pack_u16(self.turn),
|
||||
|
@ -211,7 +211,7 @@ impl FileSystem {
|
||||
|
||||
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 dir_index = id & HANDLE_BUCKET_MASK;
|
||||
@ -266,9 +266,9 @@ impl FileSystem {
|
||||
file.read_exact(&mut buffer).map_err(|_| ())?;
|
||||
let data = unpack_u16(&buffer, &mut 0);
|
||||
result.push(Play {
|
||||
source:(data & 1) as u8,
|
||||
from:((data >> 1) & 0x3F) as u8,
|
||||
to:((data >> 7) & 0x3F) as u8,
|
||||
source:(data & 0xF) as u8,
|
||||
from:((data >> 4) & 0x3F) as u8,
|
||||
to:((data >> 10) & 0x3F) as u8,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -754,13 +754,13 @@ const INTERFACE = {
|
||||
},
|
||||
|
||||
uninit() {
|
||||
if(INTERFACE_DATA.online) {
|
||||
MESSAGE_COMPOSE([
|
||||
PACK.u16(OpCode.SessionLeave),
|
||||
]);
|
||||
}
|
||||
|
||||
if(INTERFACE_DATA !== null) {
|
||||
if(INTERFACE_DATA.online) {
|
||||
MESSAGE_COMPOSE([
|
||||
PACK.u16(OpCode.SessionLeave),
|
||||
]);
|
||||
}
|
||||
|
||||
MAIN.removeChild(INTERFACE_DATA.canvas);
|
||||
INTERFACE_DATA = null;
|
||||
}
|
||||
@ -782,6 +782,8 @@ const INTERFACE = {
|
||||
GAME_DATA.turn = data.turn;
|
||||
INTERFACE_DATA.play = data.play;
|
||||
|
||||
console.log(data.play.source);
|
||||
|
||||
if(INTERFACE_DATA.play.source == 2) {
|
||||
GAME_DATA.state.code = 2;
|
||||
}
|
||||
@ -833,7 +835,7 @@ const INTERFACE = {
|
||||
retire() {
|
||||
if(INTERFACE_DATA.online) {
|
||||
MESSAGE_COMPOSE([
|
||||
OpCode.SessionRetire,
|
||||
PACK.u16(OpCode.SessionRetire),
|
||||
INTERFACE_DATA.token,
|
||||
]);
|
||||
}
|
||||
|
@ -434,35 +434,45 @@ const SCENES = {
|
||||
|
||||
UI.mainmenu();
|
||||
|
||||
let left_buttons = [ ];
|
||||
|
||||
UI.mainnav(
|
||||
[ ],
|
||||
left_buttons,
|
||||
[
|
||||
UI.div([UI.text("0 - 0 of 0")]),
|
||||
UI.button("◀", null),
|
||||
UI.button("▶", null),
|
||||
UI.button("Refresh", null),
|
||||
]
|
||||
);
|
||||
|
||||
let table = document.createElement("table");
|
||||
table.setAttribute("id", "content");
|
||||
table.setAttribute("class", "list");
|
||||
MAIN.appendChild(table);
|
||||
|
||||
MAIN.setAttribute("class", "list");
|
||||
|
||||
SCENE.refresh();
|
||||
return true;
|
||||
},
|
||||
refresh() {
|
||||
|
||||
MESSAGE_SESSION_LIST(0, 3, false, false);
|
||||
},
|
||||
message(code, data) {
|
||||
if(code == OpCode.SessionList) {
|
||||
let table = document.getElementById("content");
|
||||
UI.clear(table);
|
||||
switch(code) {
|
||||
case OpCode.SessionList: {
|
||||
let table = document.getElementById("content");
|
||||
UI.clear(table);
|
||||
|
||||
if(data !== null) {
|
||||
table.appendChild(UI.session_table(data.records));
|
||||
}
|
||||
if(data !== null) {
|
||||
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() {
|
||||
|
@ -230,9 +230,9 @@ function MESSAGE(event) {
|
||||
// Last Play
|
||||
result = UNPACK.u16(bytes, index);
|
||||
index = result.index;
|
||||
data.play.source = result.data & 1;
|
||||
data.play.from = (result.data >> 1) & 0x3F;
|
||||
data.play.to = (result.data >> 7) & 0x3F;
|
||||
data.play.source = result.data & 0xF;
|
||||
data.play.from = (result.data >> 4) & 0x3F;
|
||||
data.play.to = (result.data >> 10) & 0x3F;
|
||||
|
||||
// Turn
|
||||
result = UNPACK.u16(bytes, index);
|
||||
@ -314,9 +314,9 @@ function MESSAGE(event) {
|
||||
// Play description
|
||||
result = UNPACK.u16(bytes, index);
|
||||
index = result.index;
|
||||
data.play.source = result.data & 1;
|
||||
data.play.from = (result.data >> 1) & 0x3F;
|
||||
data.play.to = (result.data >> 7) & 0x3F;
|
||||
data.play.source = result.data & 0xF;
|
||||
data.play.from = (result.data >> 4) & 0x3F;
|
||||
data.play.to = (result.data >> 10) & 0x3F;
|
||||
} break;
|
||||
|
||||
default:
|
||||
|
Loading…
x
Reference in New Issue
Block a user