refactor(chat): split sessions by vip status
This commit is contained in:
@@ -1,13 +1,11 @@
|
||||
/**
|
||||
* Chat 状态机:State 形状 + 初始值
|
||||
*
|
||||
* 注:GuestChatQuota 仍位于 chat-machine.ts(属于业务常量,与上下文配对紧密)。
|
||||
*
|
||||
* 新增 `wsConnected: boolean`(仅 userSession 期间 true):
|
||||
* - WS 已连 → 消息发送走 WS,不消耗次数
|
||||
* - WS 未连 → 消息发送走 HTTP,消耗次数
|
||||
* `wsConnected: boolean` 仅 VIP 会话期间有意义:
|
||||
* - VIP + WS 已连 → 消息发送走 WS
|
||||
* - 非 VIP / 游客 → 不连接 WS,消息走 HTTP
|
||||
* - `ChatWebSocketConnected` 事件 → true
|
||||
* - `userSession.exit` → false(WS actor cleanup 时也会跑 exit)
|
||||
* - VIP 会话 exit → false(WS actor cleanup 时也会跑 exit)
|
||||
*/
|
||||
import type { UiMessage } from "@/data/dto/chat";
|
||||
|
||||
@@ -15,14 +13,11 @@ export interface ChatState {
|
||||
messages: UiMessage[];
|
||||
isReplyingAI: boolean;
|
||||
/**
|
||||
* WebSocket 连接状态(仅 userSession 期间 true)
|
||||
* - 决定消息发送路径(WS / HTTP)和是否消耗次数
|
||||
* - true:走 WS,不消耗次数
|
||||
* - false:走 HTTP,消耗次数
|
||||
* WebSocket 连接状态(仅 VIP 用户会话期间 true)
|
||||
* - VIP true:走 WS
|
||||
* - 非 VIP / 游客:固定 false,走 HTTP
|
||||
*/
|
||||
wsConnected: boolean;
|
||||
/** 当前非游客用户是否 VIP;游客会话固定 false。 */
|
||||
isVip: boolean;
|
||||
/** 游客剩余配额(次/天)—— 仅游客业务展示用
|
||||
*/
|
||||
guestRemainingQuota: number;
|
||||
@@ -37,11 +32,11 @@ export interface ChatState {
|
||||
historyOffset: number;
|
||||
/** 游客配额加载完成标志(仅 guestSession 期间) —— default false
|
||||
* - guestSession.initializing 走 always barrier:`quotaLoaded && historyLoaded` 才进 ready
|
||||
* - userSession 永不为 true(不调 loadQuota)—— OK,不影响 barrier
|
||||
* - user sessions 永不为 true(不调 loadQuota)—— OK,不影响 barrier
|
||||
*/
|
||||
quotaLoaded: boolean;
|
||||
/** history 加载完成标志(initial load —— local → network → save 跑完)
|
||||
* - guestSession.initializing / userSession.initializing 走 always barrier
|
||||
* - guestSession.initializing / user sessions initializing 走 always barrier
|
||||
* - 不被 `loadMoreHistoryActor` 设置(翻页是另一码事)
|
||||
*/
|
||||
historyLoaded: boolean;
|
||||
@@ -51,7 +46,6 @@ export const initialState: ChatState = {
|
||||
messages: [],
|
||||
isReplyingAI: false,
|
||||
wsConnected: false,
|
||||
isVip: false,
|
||||
guestRemainingQuota: 0,
|
||||
guestTotalQuota: 0,
|
||||
quotaExceededTrigger: 0,
|
||||
|
||||
Reference in New Issue
Block a user