Include a serde feature in the shared crate

This commit is contained in:
2024-03-23 13:36:28 +01:00
parent 3d93bf0fda
commit f1962503b8
22 changed files with 134 additions and 281 deletions

View File

@@ -8,13 +8,13 @@ categories = ["gui", "wasm", "web-programming"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
yew = { version="0.20", features=["csr"] }
yew = { version = "0.21.0", features=["csr"] }
board-shared = { path = "../board-shared" }
board-network = { path = "../board-network" }
gloo-dialogs = "0.1.1"
gloo-dialogs = "0.2.0"
getrandom = { version = "0.2.8", features = ["js"] }
gloo-net = "0.2.6"
gloo-net = "0.5.0"
futures = "0.3.26"
serde_json = "1.0.93"
gloo-utils = "0.1.6"
gloo-utils = "0.2.0"
web-sys = "0.3.61"

View File

@@ -1,7 +1,7 @@
use crate::tile_view::TileView;
use board_shared::game::Hand;
use yew::html;
use yew::prelude::*;
use yew::{html, Callback, Html};
#[derive(Properties, PartialEq)]
pub struct HandViewProps {

View File

@@ -43,7 +43,7 @@ pub fn remote_game_view(
}: &RemoteGameViewProps,
) -> Html {
macro_rules! send_client_message {
($write:expr, $message:expr) => {{
($write:ident, $message:expr) => {{
let write = $write.clone();
spawn_local(async move {
write
@@ -68,61 +68,54 @@ pub fn remote_game_view(
let player_name = player_name.clone();
let room_name = room_name.clone();
let write = write.clone();
use_effect_with_deps(
move |_| {
send_client_message!(
write,
if let Some(room_name) = room_name {
ClientMessage::JoinRoom(room_name, player_name)
} else {
ClientMessage::CreateRoom(player_name)
}
);
},
(),
);
use_effect(move || {
send_client_message!(
write,
if let Some(room_name) = room_name {
ClientMessage::JoinRoom(room_name, player_name)
} else {
ClientMessage::CreateRoom(player_name)
}
);
});
let is_started = is_started.clone();
let current_player_turn = current_player_turn.clone();
let read = read.clone();
use_effect_with_deps(
move |_| {
spawn_local(async move {
while let Some(event) = read.borrow_mut().next().await {
if let Message::Text(msg) = event.unwrap() {
match serde_json::from_str::<ServerMessage>(&msg) {
Ok(ServerMessage::JoinedRoom {
room_name,
has_started,
..
}) => {
alert(&format!("Joined room {room_name}"));
is_started.set(has_started);
}
Ok(ServerMessage::PlayerTurn(player_id)) => {
current_player_turn.set(player_id);
is_started.set(true);
}
Ok(ServerMessage::SyncHand(hand)) => {
in_hand
.set(Hand::new(hand.iter().map(|&x| x.into()).collect()));
}
Ok(ServerMessage::TilePlaced(pos, tile)) => {
let mut changed = board.deref().clone();
changed.set(pos.x, pos.y, tile.into());
board.set(changed);
}
r => {
alert(&format!("{r:?}"));
}
};
}
use_effect(move || {
spawn_local(async move {
while let Some(event) = read.borrow_mut().next().await {
if let Message::Text(msg) = event.unwrap() {
match serde_json::from_str::<ServerMessage>(&msg) {
Ok(ServerMessage::JoinedRoom {
room_name,
has_started,
..
}) => {
alert(&format!("Joined room {room_name}"));
is_started.set(has_started);
}
Ok(ServerMessage::PlayerTurn(player_id)) => {
current_player_turn.set(player_id);
is_started.set(true);
}
Ok(ServerMessage::SyncHand(hand)) => {
in_hand.set(Hand::new(hand.iter().map(|&x| x.into()).collect()));
}
Ok(ServerMessage::TilePlaced(pos, tile)) => {
let mut changed = board.deref().clone();
changed.set(pos.x, pos.y, tile.into());
board.set(changed);
}
r => {
alert(&format!("{r:?}"));
}
};
}
});
|| {}
},
(),
);
}
});
|| {}
});
}
let on_tile_select = {

View File

@@ -1,6 +1,6 @@
use board_shared::tile::Tile;
use yew::html;
use yew::prelude::*;
use yew::{html, Callback, Html};
#[derive(Properties, PartialEq)]
pub struct PlacedTileViewProps {
@@ -54,6 +54,6 @@ pub fn tile_view(
html! {
<div class="tile" onclick={Callback::from(move |_| {
on_select.emit(idx)
})}>{ tile }</div>
})}>{ tile.to_string() }</div>
}
}