Skip to content

Commit 14c0518

Browse files
committed
refactor: streamline network mode handling and encapsulate service instances within state management
1 parent 84922c7 commit 14c0518

File tree

3 files changed

+10
-21
lines changed

3 files changed

+10
-21
lines changed

src/page/chat/ChatPanel.tsx

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -169,17 +169,9 @@ const ChatPanel: React.FC = () => {
169169
};
170170

171171
const handleToggleNetworkMode = () => {
172-
// 获取GroupChatService实例
173-
const groupChatService = (window as any).groupChatService;
174-
if (groupChatService && typeof groupChatService.toggleNetworkMode === 'function') {
175-
const newMode = groupChatService.toggleNetworkMode();
176-
setIsLocalNetwork(newMode);
177-
setNetworkModeDialogOpen(false);
178-
} else {
179-
// 如果无法直接访问服务实例,可以通过事件系统发送切换请求
180-
chatEvents.emit('requestToggleNetworkMode');
181-
setNetworkModeDialogOpen(false);
182-
}
172+
// 使用事件系统发送切换请求 - 正确的架构模式
173+
chatEvents.emit('requestToggleNetworkMode');
174+
setNetworkModeDialogOpen(false);
183175
};
184176

185177
if (!currentChat) {

src/services/groupChatService.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { MessageService } from './messageService'
66
import { PeerService } from './peerService'
77

88
export class GroupChatService {
9+
private keepAliveInterval: number | null = null
10+
911
constructor(
1012
private set: SetStateFunction<ChatState>,
1113
private get: GetStateFunction<ChatState>,
@@ -98,7 +100,7 @@ export class GroupChatService {
98100
}, 60000) // 每分钟一次
99101

100102
// 保存定时器ID,以便在离开群聊时清除
101-
; (window as any).keepAliveInterval = keepAliveInterval
103+
this.keepAliveInterval = keepAliveInterval
102104
}
103105

104106
// 加入群聊
@@ -293,9 +295,9 @@ export class GroupChatService {
293295
})
294296

295297
// 清除保持活跃的定时器
296-
if ((window as any).keepAliveInterval) {
297-
clearInterval((window as any).keepAliveInterval)
298-
; (window as any).keepAliveInterval = null
298+
if (this.keepAliveInterval) {
299+
clearInterval(this.keepAliveInterval)
300+
this.keepAliveInterval = null
299301
}
300302

301303
// 断开所有连接

src/store/useChatStore.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,7 @@ const useChatStore = create<ChatState>((set, get) => {
1818
const messageService = new MessageService(set, get, chatEvents)
1919
const groupChatService = new GroupChatService(set, get, chatEvents, peerService, messageService)
2020

21-
// 将服务实例暴露给全局,方便在组件中直接调用
22-
if (typeof window !== 'undefined') {
23-
(window as any).peerService = peerService;
24-
(window as any).messageService = messageService;
25-
(window as any).groupChatService = groupChatService;
26-
}
21+
// 服务实例通过事件系统和状态管理进行通信,不暴露到全局
2722

2823
// 监听网络模式切换请求
2924
chatEvents.on('requestToggleNetworkMode', () => {

0 commit comments

Comments
 (0)