Include a serde feature in the shared crate
This commit is contained in:
@@ -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"
|
||||
|
@@ -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 {
|
||||
|
@@ -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 = {
|
||||
|
@@ -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>
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user