Skip to content

Commit 069a1d2

Browse files
Refactor
1 parent c889f49 commit 069a1d2

File tree

9 files changed

+88
-31
lines changed

9 files changed

+88
-31
lines changed

src/client/chat/events.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ use crate::prelude::*;
33
#[derive(Event)]
44
pub struct ChatSyncEvent(pub Vec<lib::ChatMessage>);
55

6+
#[derive(Event)]
7+
pub struct SingleChatSendEvent(pub lib::ChatMessage);
8+
69
#[derive(Event)]
710
pub struct SendMessageEvent(pub String);
811

src/client/chat/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ impl Plugin for ChatPlugin {
2323
systems::handle_chat_container_focus_events,
2424
systems::handle_chat_input_focus_events,
2525
systems::handle_events_system,
26+
systems::add_message_to_chat_container_system,
2627
),
2728
);
2829
app.insert_resource(resources::ChatHistory::default());
2930
app.add_event::<events::ChatSyncEvent>();
3031
app.add_event::<events::FocusChangeEvent>();
3132
app.add_event::<events::SendMessageEvent>();
33+
app.add_event::<events::SingleChatSendEvent>();
3234
}
3335
}

src/client/chat/systems.rs

Lines changed: 40 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -251,38 +251,53 @@ pub fn handle_chat_input_system(
251251
}
252252

253253
pub fn handle_events_system(
254-
mut commands: Commands,
255254
mut chat_sync_events: EventReader<chat_events::ChatSyncEvent>,
255+
mut events: EventWriter<chat_events::SingleChatSendEvent>,
256+
) {
257+
for event in chat_sync_events.read() {
258+
let messages = event.0.clone();
259+
let message = messages.last();
260+
261+
match message {
262+
None => {
263+
info!("No message found");
264+
}
265+
Some(message) => {
266+
events.send(chat_events::SingleChatSendEvent(message.clone()));
267+
}
268+
}
269+
}
270+
}
271+
272+
pub fn add_message_to_chat_container_system(
273+
mut commands: Commands,
256274
query: Query<(Entity, &chat_components::ChatMessageContainer)>,
275+
mut events: EventReader<chat_events::SingleChatSendEvent>,
257276
) {
258277
let (entity, _) = query.single();
259-
let events = chat_sync_events.read();
260278

261-
for event in events {
262-
let messages = event.0.clone();
263-
let message = messages.last();
279+
let events = events.read();
264280

265-
if let Some(message) = message {
266-
commands.entity(entity).with_children(|parent| {
267-
parent.spawn(TextBundle {
268-
text: Text {
269-
sections: vec![TextSection {
270-
value: message.format_string(),
271-
style: TextStyle {
272-
font_size: 20.0,
273-
color: Color::WHITE,
274-
..default()
275-
},
276-
}],
277-
..default()
278-
},
279-
style: Style {
280-
margin: UiRect::all(Val::Px(5.0)),
281-
..default()
282-
},
281+
for event in events {
282+
commands.entity(entity).with_children(|parent| {
283+
parent.spawn(TextBundle {
284+
text: Text {
285+
sections: vec![TextSection {
286+
value: event.0.format_string(),
287+
style: TextStyle {
288+
font_size: 20.0,
289+
color: Color::WHITE,
290+
..default()
291+
},
292+
}],
283293
..default()
284-
});
294+
},
295+
style: Style {
296+
margin: UiRect::all(Val::Px(5.0)),
297+
..default()
298+
},
299+
..default()
285300
});
286-
}
301+
});
287302
}
288303
}

src/client/networking/systems.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ pub fn receive_message_system(
1010
mut chunk_manager: ResMut<terrain_resources::ChunkManager>,
1111
mut chunk_mesh_events: ResMut<Events<terrain_events::ChunkMeshUpdateEvent>>,
1212
mut chat_events: ResMut<Events<chat_events::ChatSyncEvent>>,
13+
mut single_chat_events: ResMut<Events<chat_events::SingleChatSendEvent>>,
1314
mut spawn_area_loaded: ResMut<terrain_resources::SpawnAreaLoaded>,
1415
) {
1516
while let Some(message) = client.receive_message(DefaultChannel::ReliableOrdered) {
@@ -38,6 +39,10 @@ pub fn receive_message_system(
3839
debug!("Client received chat messages");
3940
chat_events.send(chat_events::ChatSyncEvent(messages));
4041
}
42+
lib::NetworkingMessage::SingleChatMessageSync(message) => {
43+
debug!("Client received chat message");
44+
single_chat_events.send(chat_events::SingleChatSendEvent(message));
45+
}
4146
_ => {
4247
warn!("Received unknown message type. (ReliableOrdered)");
4348
}

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ pub enum NetworkingMessage {
4444
ChunkBatchRequest(Vec<Vec3>),
4545
ChunkBatchResponse(Vec<Chunk>),
4646
ChatMessageSend(String),
47+
SingleChatMessageSync(ChatMessage),
4748
ChatMessageSync(Vec<ChatMessage>),
4849
BlockUpdate { position: Vec3, block: BlockId },
4950
}

src/server/chat/events.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,8 @@ pub struct PlayerChatMessageSendEvent {
55
pub client_id: ClientId,
66
pub message: String,
77
}
8+
9+
#[derive(Event)]
10+
pub struct SyncPlayerChatMessagesEvent {
11+
pub client_id: ClientId,
12+
}

src/server/chat/mod.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ impl Plugin for ChatPlugin {
1010
fn build(&self, app: &mut App) {
1111
info!("Building ChatPlugin");
1212
app.insert_resource(resources::ChatHistory::new());
13-
app.add_systems(Update, chat_systems::handle_network_chat_message_send);
13+
app.add_systems(Update, chat_systems::sync_player_chat_messages_event);
14+
app.add_systems(
15+
Update,
16+
chat_systems::sync_single_player_chat_messages_system,
17+
);
1418
app.add_event::<chat_events::PlayerChatMessageSendEvent>();
19+
app.add_event::<chat_events::SyncPlayerChatMessagesEvent>();
1520
}
1621
}

src/server/chat/systems.rs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::time::UNIX_EPOCH;
22

33
use crate::prelude::*;
44

5-
pub fn handle_network_chat_message_send(
5+
pub fn sync_single_player_chat_messages_system(
66
mut server: ResMut<RenetServer>,
77
mut player_send_messages: EventReader<chat_events::PlayerChatMessageSendEvent>,
88
mut chat_messages: ResMut<chat_resources::ChatHistory>,
@@ -13,15 +13,16 @@ pub fn handle_network_chat_message_send(
1313
let message_count = chat_messages.messages.len();
1414
let message_id = message_count;
1515

16-
chat_messages.messages.push(lib::ChatMessage {
16+
let chat_message = lib::ChatMessage {
1717
client_id,
1818
message_id,
1919
message,
2020
timestamp: get_current_time_in_ms(),
21-
});
21+
};
2222

23-
let response_message =
24-
lib::NetworkingMessage::ChatMessageSync(chat_messages.messages.clone());
23+
chat_messages.messages.push(chat_message.clone());
24+
25+
let response_message = lib::NetworkingMessage::SingleChatMessageSync(chat_message);
2526

2627
server.broadcast_message(
2728
DefaultChannel::ReliableOrdered,
@@ -30,6 +31,20 @@ pub fn handle_network_chat_message_send(
3031
}
3132
}
3233

34+
pub fn sync_player_chat_messages_event(
35+
mut server: ResMut<RenetServer>,
36+
mut events: EventReader<chat_events::SyncPlayerChatMessagesEvent>,
37+
chat_messages: ResMut<chat_resources::ChatHistory>,
38+
) {
39+
for event in events.read() {
40+
let client_id = event.client_id;
41+
let history = chat_messages.messages.clone();
42+
43+
let response_message = bincode::serialize(&history).unwrap();
44+
server.send_message(client_id, DefaultChannel::ReliableOrdered, response_message);
45+
}
46+
}
47+
3348
fn get_current_time_in_ms() -> i64 {
3449
let start = SystemTime::now();
3550
let since_the_epoch = start.duration_since(UNIX_EPOCH);

src/server/networking/systems.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ pub fn handle_events_system(
115115
mut player_states: ResMut<player_resources::PlayerStates>,
116116
past_block_updates: Res<terrain_resources::PastBlockUpdates>,
117117
mut chat_message_events: EventWriter<chat_events::PlayerChatMessageSendEvent>,
118+
mut chat_sync_events: EventWriter<chat_events::SyncPlayerChatMessagesEvent>,
118119
) {
119120
for event in server_events.read() {
120121
match event {
@@ -127,6 +128,11 @@ pub fn handle_events_system(
127128
rotation: Quat::IDENTITY,
128129
},
129130
);
131+
132+
chat_sync_events.send(chat_events::SyncPlayerChatMessagesEvent {
133+
client_id: *client_id,
134+
});
135+
130136
chat_message_events.send(chat_events::PlayerChatMessageSendEvent {
131137
client_id: lib::SERVER_MESSAGE_ID,
132138
message: format!("Player {} joined the game", client_id),

0 commit comments

Comments
 (0)