refactor(chat): split sessions by vip status
This commit is contained in:
@@ -31,8 +31,8 @@ const log = new Logger("StoresChatChatMachineActors");
|
||||
* 为什么用 module-level 而非 context.wsRef:
|
||||
* 1) `ChatWebSocket` 是带回调 + 重连 timer 的非可序列化对象,放进
|
||||
* XState context 会污染快照、警告 non-serializable
|
||||
* 2) userSession 同一时间只可能有一个活跃 WS(parent-level invoke),
|
||||
* module 单例的语义和"userSession 内一个活跃连接"一一对应
|
||||
* 2) vipUserSession 同一时间只可能有一个活跃 WS(parent-level invoke),
|
||||
* module 单例的语义和"VIP 会话内一个活跃连接"一一对应
|
||||
* 3) 不需要重构 ChatWebSocket 类的对外 API
|
||||
*/
|
||||
let activeChatWebSocket: ChatWebSocket | null = null;
|
||||
@@ -123,7 +123,7 @@ export const loadMoreHistoryActor = fromPromise<
|
||||
// WebSocket: long-lived callback
|
||||
// ============================================================
|
||||
/**
|
||||
* 长生命周期 WebSocket(仅 `userSession` 期间 invoke)
|
||||
* 长生命周期 WebSocket(仅 `vipUserSession` 期间 invoke)
|
||||
* - 启动:连 WS,事件 → sendBack 派回机器
|
||||
* - 停止(cleanup):disconnect
|
||||
* - 游客不 invoke 此 actor(业务事实"游客不连 WS")
|
||||
@@ -170,7 +170,7 @@ export const chatWebSocketActor = fromCallback<ChatEvent, { token: string }>(
|
||||
// WebSocket: per-send callback
|
||||
// ============================================================
|
||||
/**
|
||||
* WS 发送消息(userSession.sendingViaWs 期间 invoke)
|
||||
* WS 发送消息(vipUserSession.sendingViaWs 期间 invoke)
|
||||
* - 走 `activeChatWebSocket.sendMessage(content)`
|
||||
* - 成功后 AI 回复通过 `chatWebSocketActor` 的 `onSentence` → `ChatAISentenceReceived` 流回
|
||||
* - 失败抛错 → state machine 的 `onError` 兜底(清 isReplyingAI、回 ready)
|
||||
|
||||
Reference in New Issue
Block a user