//消息管理器 import { deepCopy } from "@/utils/common"; import { WebSocketMessage } from "./websocket"; import { getkfUserList, asyncKfUserList } from "@/store/module/ckchat/ckchat"; import { Messages } from "./msg.data"; import { useWeChatStore } from "@/store/module/weChat/weChat"; // 消息处理器类型定义 type MessageHandler = (message: WebSocketMessage) => void; const setVideoUrl = useWeChatStore.getState().setVideoUrl; const addMessage = useWeChatStore.getState().addMessage; const receivedMsg = useWeChatStore.getState().receivedMsg; // 消息处理器映射 const messageHandlers: Record = { // 微信账号存活状态响应 CmdRequestWechatAccountsAliveStatusResp: message => { // console.log("微信账号存活状态响应", message); // 获取客服列表 const kfUserList = deepCopy(getkfUserList()); const wechatAccountsAliveStatus = message.wechatAccountsAliveStatus || {}; // 遍历客服列表,更新存活状态 kfUserList.forEach(kfUser => { kfUser.isOnline = wechatAccountsAliveStatus[kfUser.id]; }); asyncKfUserList(kfUserList); }, // 发送消息响应 CmdSendMessageResp: message => { console.log("发送消息响应", message); addMessage(message.friendMessage); // 在这里添加具体的处理逻辑 }, CmdSendMessageResult: message => { console.log("发送消息结果", message); // 在这里添加具体的处理逻辑 }, // 接收消息响应 CmdReceiveMessageResp: message => { console.log("接收消息响应", message); addMessage(message.friendMessage); // 在这里添加具体的处理逻辑 }, //收到消息 CmdNewMessage: (message: Messages) => { // 在这里添加具体的处理逻辑 receivedMsg(message.friendMessage); }, // 登录响应 CmdSignInResp: message => { console.log("登录响应", message); // 在这里添加具体的处理逻辑 }, // 通知消息 CmdNotify: message => { console.log("通知消息", message); // 在这里添加具体的处理逻辑 if (message.notify == "Kicked out") { // 被踢出时直接跳转到登录页面 window.location.href = "/login"; } }, CmdDownloadVideoResult: message => { // 在这里添加具体的处理逻辑 setVideoUrl(message.friendMessageId, message.url); }, // 可以继续添加更多处理器... }; // 默认处理器 const defaultHandler: MessageHandler = message => { console.log("未知消息类型", message.cmdType, message); }; // 注册新的消息处理器 export const registerMessageHandler = ( cmdType: string, handler: MessageHandler, ) => { messageHandlers[cmdType] = handler; }; // 移除消息处理器 export const unregisterMessageHandler = (cmdType: string) => { delete messageHandlers[cmdType]; }; // 获取所有已注册的消息类型 export const getRegisteredMessageTypes = (): string[] => { return Object.keys(messageHandlers); }; // 消息管理核心函数 export const msgManageCore = (message: WebSocketMessage) => { const cmdType = message.cmdType; if (!cmdType) { console.warn("消息缺少cmdType字段", message); return; } // 获取对应的处理器,如果没有则使用默认处理器 const handler = messageHandlers[cmdType] || defaultHandler; try { handler(message); } catch (error) { console.error(`处理消息类型 ${cmdType} 时发生错误:`, error); } };