o_sfu_protocol/core/
server_events.rs1use super::{Command, Commands, ProtocolCore, ProtocolEvent};
2use crate::signaling::{ServerMessage, TrackBinding};
3
4pub(super) fn handle_server_message(core: &mut ProtocolCore, message: ServerMessage) -> Commands {
5 match message {
6 ServerMessage::Welcome(payload) => core.accept_welcome(payload),
7 ServerMessage::Tracks(bindings) => replace_track_snapshot(core, bindings),
8 ServerMessage::Sources(_) => Vec::new(),
9 ServerMessage::PeerInfo(payload) | ServerMessage::PeerJoined(payload) => {
10 vec![Command::EmitEvent {
11 event: ProtocolEvent::PeerInfo {
12 user_id: payload.user_id,
13 info: payload.info,
14 },
15 }]
16 }
17 ServerMessage::PeerLeft(payload) => {
18 core.track_users_by_mid
19 .retain(|_, user_id| *user_id != payload.user_id);
20 vec![Command::EmitEvent {
21 event: ProtocolEvent::PeerLeft {
22 user_id: payload.user_id,
23 },
24 }]
25 }
26 ServerMessage::Broadcast(payload) => vec![Command::EmitEvent {
27 event: ProtocolEvent::Broadcast {
28 sender_id: payload.sender_id,
29 message: payload.message,
30 },
31 }],
32 ServerMessage::RecordingChange(payload) => vec![
33 Command::SetRecordingState {
34 state: payload.state.clone(),
35 },
36 Command::EmitEvent {
37 event: ProtocolEvent::RecordingStateChanged { state: payload },
38 },
39 ],
40 }
41}
42
43fn replace_track_snapshot(core: &mut ProtocolCore, bindings: Vec<TrackBinding>) -> Commands {
44 core.track_users_by_mid = bindings
45 .iter()
46 .map(|binding| (binding.mid.clone(), binding.user_id.clone()))
47 .collect();
48 vec![Command::EmitEvent {
49 event: ProtocolEvent::TrackSnapshot { bindings },
50 }]
51}