feat: add teleport
This commit is contained in:
parent
226c2e02b5
commit
32e5e42462
11 changed files with 603 additions and 16 deletions
|
|
@ -73,6 +73,15 @@ pub struct WsError {
|
|||
pub message: String,
|
||||
}
|
||||
|
||||
/// Teleport information received from server.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct TeleportInfo {
|
||||
/// Scene ID to teleport to.
|
||||
pub scene_id: uuid::Uuid,
|
||||
/// Scene slug for URL.
|
||||
pub scene_slug: String,
|
||||
}
|
||||
|
||||
/// Hook to manage WebSocket connection for a channel.
|
||||
///
|
||||
/// Returns a tuple of:
|
||||
|
|
@ -91,6 +100,7 @@ pub fn use_channel_websocket(
|
|||
on_member_fading: Callback<FadingMember>,
|
||||
on_welcome: Option<Callback<ChannelMemberInfo>>,
|
||||
on_error: Option<Callback<WsError>>,
|
||||
on_teleport_approved: Option<Callback<TeleportInfo>>,
|
||||
) -> (Signal<WsState>, WsSenderStorage) {
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
|
|
@ -190,6 +200,7 @@ pub fn use_channel_websocket(
|
|||
let on_member_fading_clone = on_member_fading.clone();
|
||||
let on_welcome_clone = on_welcome.clone();
|
||||
let on_error_clone = on_error.clone();
|
||||
let on_teleport_approved_clone = on_teleport_approved.clone();
|
||||
// For starting heartbeat on Welcome
|
||||
let ws_ref_for_heartbeat = ws_ref.clone();
|
||||
let heartbeat_started: Rc<RefCell<bool>> = Rc::new(RefCell::new(false));
|
||||
|
|
@ -257,6 +268,7 @@ pub fn use_channel_websocket(
|
|||
&on_prop_picked_up_clone,
|
||||
&on_member_fading_clone,
|
||||
&on_error_clone,
|
||||
&on_teleport_approved_clone,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -304,6 +316,7 @@ fn handle_server_message(
|
|||
on_prop_picked_up: &Callback<uuid::Uuid>,
|
||||
on_member_fading: &Callback<FadingMember>,
|
||||
on_error: &Option<Callback<WsError>>,
|
||||
on_teleport_approved: &Option<Callback<TeleportInfo>>,
|
||||
) {
|
||||
let mut members_vec = members.borrow_mut();
|
||||
|
||||
|
|
@ -456,6 +469,17 @@ fn handle_server_message(
|
|||
}
|
||||
on_update.run(members_vec.clone());
|
||||
}
|
||||
ServerMessage::TeleportApproved {
|
||||
scene_id,
|
||||
scene_slug,
|
||||
} => {
|
||||
if let Some(callback) = on_teleport_approved {
|
||||
callback.run(TeleportInfo {
|
||||
scene_id,
|
||||
scene_slug,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -473,6 +497,7 @@ pub fn use_channel_websocket(
|
|||
_on_member_fading: Callback<FadingMember>,
|
||||
_on_welcome: Option<Callback<ChannelMemberInfo>>,
|
||||
_on_error: Option<Callback<WsError>>,
|
||||
_on_teleport_approved: Option<Callback<TeleportInfo>>,
|
||||
) -> (Signal<WsState>, WsSenderStorage) {
|
||||
let (ws_state, _) = signal(WsState::Disconnected);
|
||||
let sender: WsSenderStorage = StoredValue::new_local(None);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue