add initial crates and apps
This commit is contained in:
parent
5c87ba3519
commit
1ca300098f
113 changed files with 28169 additions and 0 deletions
92
crates/chattyness-db/src/ws_messages.rs
Normal file
92
crates/chattyness-db/src/ws_messages.rs
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
//! WebSocket message protocol for channel presence.
|
||||
//!
|
||||
//! Shared message types used by both server and WASM client.
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::models::{ChannelMemberInfo, ChannelMemberWithAvatar};
|
||||
|
||||
/// Client-to-server WebSocket messages.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(tag = "type", rename_all = "snake_case")]
|
||||
pub enum ClientMessage {
|
||||
/// Update position in the channel.
|
||||
UpdatePosition {
|
||||
/// X coordinate in scene space.
|
||||
x: f64,
|
||||
/// Y coordinate in scene space.
|
||||
y: f64,
|
||||
},
|
||||
|
||||
/// Update emotion (0-9).
|
||||
UpdateEmotion {
|
||||
/// Emotion slot (0-9, keyboard: e0-e9).
|
||||
emotion: u8,
|
||||
},
|
||||
|
||||
/// Ping to keep connection alive.
|
||||
Ping,
|
||||
}
|
||||
|
||||
/// Server-to-client WebSocket messages.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
#[serde(tag = "type", rename_all = "snake_case")]
|
||||
pub enum ServerMessage {
|
||||
/// Welcome message with initial state after connection.
|
||||
Welcome {
|
||||
/// This user's member info.
|
||||
member: ChannelMemberInfo,
|
||||
/// All current members with avatars.
|
||||
members: Vec<ChannelMemberWithAvatar>,
|
||||
},
|
||||
|
||||
/// A member joined the channel.
|
||||
MemberJoined {
|
||||
/// The member that joined.
|
||||
member: ChannelMemberWithAvatar,
|
||||
},
|
||||
|
||||
/// A member left the channel.
|
||||
MemberLeft {
|
||||
/// User ID (if authenticated user).
|
||||
user_id: Option<Uuid>,
|
||||
/// Guest session ID (if guest).
|
||||
guest_session_id: Option<Uuid>,
|
||||
},
|
||||
|
||||
/// A member updated their position.
|
||||
PositionUpdated {
|
||||
/// User ID (if authenticated user).
|
||||
user_id: Option<Uuid>,
|
||||
/// Guest session ID (if guest).
|
||||
guest_session_id: Option<Uuid>,
|
||||
/// New X coordinate.
|
||||
x: f64,
|
||||
/// New Y coordinate.
|
||||
y: f64,
|
||||
},
|
||||
|
||||
/// A member changed their emotion.
|
||||
EmotionUpdated {
|
||||
/// User ID (if authenticated user).
|
||||
user_id: Option<Uuid>,
|
||||
/// Guest session ID (if guest).
|
||||
guest_session_id: Option<Uuid>,
|
||||
/// New emotion slot (0-9).
|
||||
emotion: u8,
|
||||
/// Asset paths for all 9 positions of the new emotion layer.
|
||||
emotion_layer: [Option<String>; 9],
|
||||
},
|
||||
|
||||
/// Pong response to client ping.
|
||||
Pong,
|
||||
|
||||
/// Error message.
|
||||
Error {
|
||||
/// Error code.
|
||||
code: String,
|
||||
/// Error message.
|
||||
message: String,
|
||||
},
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue