From e83512382f285c5372ffba2251dda57bee3fc05f Mon Sep 17 00:00:00 2001 From: ZhenYi <434836402@qq.com> Date: Fri, 24 Apr 2026 00:04:01 +0800 Subject: [PATCH] feat(room): add TypingEvent type and TypingStart/TypingStop event variants Add TypingEvent struct in queue::types for broadcast-based typing indicators, and TypingStart/TypingStop variants in RoomEventType for WebSocket event dispatch. --- libs/queue/lib.rs | 2 +- libs/queue/types.rs | 11 +++++++++++ libs/room/src/types.rs | 6 ++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/libs/queue/lib.rs b/libs/queue/lib.rs index 80e6ed7..f9ae979 100644 --- a/libs/queue/lib.rs +++ b/libs/queue/lib.rs @@ -7,7 +7,7 @@ pub mod worker; pub use producer::{MessageProducer, RedisPubSub}; pub use types::{ AgentTaskEvent, EmailEnvelope, ProjectRoomEvent, ReactionGroup, RoomMessageEnvelope, - RoomMessageEvent, RoomMessageStreamChunkEvent, + RoomMessageEvent, RoomMessageStreamChunkEvent, TypingEvent, }; pub use worker::{ room_worker_task, start as start_worker, start_email_worker, EmailSendFn, EmailSendFut, GetRedis, diff --git a/libs/queue/types.rs b/libs/queue/types.rs index 86d1bbb..f7cf8ed 100644 --- a/libs/queue/types.rs +++ b/libs/queue/types.rs @@ -42,6 +42,17 @@ pub struct RoomMessageEvent { pub message_id: Option, } +/// Typing indicator event — broadcast to all room members. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TypingEvent { + pub room_id: Uuid, + pub user_id: Uuid, + pub username: String, + pub avatar_url: Option, + /// "start" or "stop" + pub action: String, +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ReactionGroup { pub emoji: String, diff --git a/libs/room/src/types.rs b/libs/room/src/types.rs index 1e5ef60..1a6b6d3 100644 --- a/libs/room/src/types.rs +++ b/libs/room/src/types.rs @@ -33,6 +33,8 @@ pub enum RoomEventType { ReadReceipt, ReactionAdded, ReactionRemoved, + TypingStart, + TypingStop, } impl RoomEventType { @@ -55,6 +57,8 @@ impl RoomEventType { RoomEventType::ReadReceipt => "read_receipt", RoomEventType::ReactionAdded => "reaction_added", RoomEventType::ReactionRemoved => "reaction_removed", + RoomEventType::TypingStart => "typing_start", + RoomEventType::TypingStop => "typing_stop", } } @@ -77,6 +81,8 @@ impl RoomEventType { "read_receipt" => Some(RoomEventType::ReadReceipt), "reaction_added" => Some(RoomEventType::ReactionAdded), "reaction_removed" => Some(RoomEventType::ReactionRemoved), + "typing_start" => Some(RoomEventType::TypingStart), + "typing_stop" => Some(RoomEventType::TypingStop), _ => None, } }