refactor: useOnlineCount 重构为 useOnlineUsers,DictMessage 重命名为 DictChangeMessage

This commit is contained in:
Ray.Hao committed 2026-07-30 18:51:23 +08:00
1 parent 4403380d49
commit 48f0ac118c
3 files changed
+5 -69

No files matched your search

-65
View File
@@ -1,65 +0,0 @@
import { ref, onMounted, getCurrentInstance } from "vue";
import { useSse } from "./useSse";
let globalInstance: ReturnType<typeof createOnlineCountComposable> | null = null;
function createOnlineCountComposable() {
const onlineUserCount = ref(0);
const lastUpdateTime = ref(0);
const sse = useSse();
let unsubscribe: (() => void) | null = null;
// 处理在线人数变更消息
const handleOnlineCountMessage = (count: number) => {
if (!Number.isFinite(count) || count < 0) return;
onlineUserCount.value = count;
lastUpdateTime.value = Date.now();
};
const initialize = () => {
sse.connect();
unsubscribe = sse.on("online-count", handleOnlineCountMessage);
};
const cleanup = () => {
if (unsubscribe) {
unsubscribe();
unsubscribe = null;
}
onlineUserCount.value = 0;
lastUpdateTime.value = 0;
};
return {
onlineUserCount: readonly(onlineUserCount),
lastUpdateTime: readonly(lastUpdateTime),
isConnected: sse.isConnected,
connectionState: sse.connectionState,
initialize,
cleanup,
};
}
/**
* 在线用户计数组合式函数(单例模式)
*/
export function useOnlineCount(options: { autoInit?: boolean } = {}) {
const { autoInit = true } = options;
if (!globalInstance) {
globalInstance = createOnlineCountComposable();
}
const instance = getCurrentInstance();
if (autoInit && instance) {
onMounted(() => {
if (!globalInstance!.isConnected.value) {
globalInstance!.initialize();
}
});
}
return globalInstance;
}