1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#![allow(clippy::panic)]
use crate::*;
use mem6_common::*;
use unwrap::unwrap;
use dodrio::{
builder::text,
bumpalo::{self, Bump},
Node,
};
use typed_html::dodrio;
pub fn div_reconnect<'a>(_rrc: &RootRenderingComponent, bump: &'a Bump) -> Node<'a> {
dodrio!(bump,
<div>
<h4>
{vec![text(bumpalo::format!(in bump,
"Click on Resync if there are problems with receiving msgs over the network:{}", "")
.into_bump_str(),)]}
</h4>
<div class="div_clickable" onclick={
move |root, vdom, _event| {
let rrc = root.unwrap_mut::<RootRenderingComponent>();
let href = rrc.game_data.href.clone();
let my_ws_uid = rrc.game_data.my_ws_uid;
logmod::debug_write(&format!(
"href {} my_ws_uid {}",
href,
my_ws_uid,
));
let _x = rrc.game_data.ws.close();
let players_ws_uid = rrc.game_data.players_ws_uid.clone();
let ws = websocketcommunicationmod::setup_ws_connection(href, my_ws_uid,players_ws_uid);
websocketcommunicationmod::setup_all_ws_events(&ws,vdom.clone());
rrc.game_data.ws=ws;
rrc.game_data.is_reconnect = false;
vdom.schedule_render();
}}>
<h2 class="h2_user_can_click">
{vec![text(
bumpalo::format!(in bump, "Resync{}", "").into_bump_str(),
)]}
</h2>
</div>
</div>
)
}
pub fn send_msg_for_resync(rrc: &RootRenderingComponent, _my_ws_uid: usize) {
logmod::debug_write("send_msg_for_resync MsgAllGameData");
websocketcommunicationmod::ws_send_msg(
&rrc.game_data.ws,
&WsMessage::MsgAllGameData {
my_ws_uid: rrc.game_data.my_ws_uid,
players_ws_uid: rrc.game_data.players_ws_uid.clone(),
players: unwrap!(serde_json::to_string(&rrc.game_data.players)),
card_grid_data: unwrap!(serde_json::to_string(&rrc.game_data.card_grid_data)),
card_index_of_first_click: rrc.game_data.card_index_of_first_click,
card_index_of_second_click: rrc.game_data.card_index_of_second_click,
player_turn: rrc.game_data.player_turn,
game_status: rrc.game_data.game_status.clone(),
},
);
}
#[allow(clippy::needless_pass_by_value)]
pub fn on_msg_all_game_data(
rrc: &mut RootRenderingComponent,
players: String,
card_grid_data: String,
card_index_of_first_click: usize,
card_index_of_second_click: usize,
player_turn: usize,
game_status: GameStatus,
) {
logmod::debug_write("on_msg_all_game_data");
rrc.game_data.is_reconnect = false;
rrc.game_data.players = unwrap!(serde_json::from_str(&players));
rrc.game_data.card_grid_data = unwrap!(serde_json::from_str(&card_grid_data));
rrc.game_data.card_index_of_first_click = card_index_of_first_click;
rrc.game_data.card_index_of_second_click = card_index_of_second_click;
rrc.game_data.player_turn = player_turn;
rrc.game_data.game_status = game_status;
rrc.game_data.msgs_waiting_ack.retain(|_x| false);
}