2025-09-11 15:00:57 +08:00
|
|
|
//消息管理器
|
|
|
|
|
import { getkfUserList, asyncKfUserList } from "@/store/module/ckchat/ckchat";
|
2025-09-17 10:20:31 +08:00
|
|
|
import { useWeChatStore } from "../weChat/weChat";
|
2025-09-18 15:25:33 +08:00
|
|
|
import { WebSocketMessage } from "./websocket";
|
|
|
|
|
import { deepCopy } from "@/utils/common";
|
|
|
|
|
import { Messages } from "./msg.data";
|
|
|
|
|
import { db } from "@/utils/db";
|
2025-09-11 15:00:57 +08:00
|
|
|
// 消息处理器类型定义
|
|
|
|
|
type MessageHandler = (message: WebSocketMessage) => void;
|
|
|
|
|
const addMessage = useWeChatStore.getState().addMessage;
|
2025-09-18 17:58:33 +08:00
|
|
|
const recallMessage = useWeChatStore.getState().recallMessage;
|
2025-09-11 15:00:57 +08:00
|
|
|
const receivedMsg = useWeChatStore.getState().receivedMsg;
|
2025-09-17 14:57:58 +08:00
|
|
|
const updateMomentCommonLoading =
|
|
|
|
|
useWeChatStore.getState().updateMomentCommonLoading;
|
|
|
|
|
const addMomentCommon = useWeChatStore.getState().addMomentCommon;
|
2025-09-11 15:00:57 +08:00
|
|
|
// 消息处理器映射
|
|
|
|
|
const messageHandlers: Record<string, MessageHandler> = {
|
|
|
|
|
// 微信账号存活状态响应
|
|
|
|
|
CmdRequestWechatAccountsAliveStatusResp: message => {
|
|
|
|
|
// console.log("微信账号存活状态响应", message);
|
|
|
|
|
// 获取客服列表
|
|
|
|
|
const kfUserList = deepCopy(getkfUserList());
|
|
|
|
|
const wechatAccountsAliveStatus = message.wechatAccountsAliveStatus || {};
|
|
|
|
|
// 遍历客服列表,更新存活状态
|
|
|
|
|
kfUserList.forEach(kfUser => {
|
|
|
|
|
kfUser.isOnline = wechatAccountsAliveStatus[kfUser.id];
|
|
|
|
|
});
|
2025-09-15 15:21:24 +08:00
|
|
|
|
|
|
|
|
// 按在线状态排序,在线的排在前面
|
|
|
|
|
kfUserList.sort((a, b) => {
|
|
|
|
|
if (a.isOnline && !b.isOnline) return -1;
|
|
|
|
|
if (!a.isOnline && b.isOnline) return 1;
|
|
|
|
|
return 0;
|
|
|
|
|
});
|
|
|
|
|
|
2025-09-11 15:00:57 +08:00
|
|
|
asyncKfUserList(kfUserList);
|
|
|
|
|
},
|
|
|
|
|
// 发送消息响应
|
|
|
|
|
CmdSendMessageResp: message => {
|
|
|
|
|
console.log("发送消息响应", message);
|
|
|
|
|
addMessage(message.friendMessage || message.chatroomMessage);
|
|
|
|
|
// 在这里添加具体的处理逻辑
|
|
|
|
|
},
|
|
|
|
|
CmdSendMessageResult: message => {
|
|
|
|
|
console.log("发送消息结果", message);
|
|
|
|
|
// 在这里添加具体的处理逻辑
|
|
|
|
|
},
|
|
|
|
|
// 接收消息响应
|
|
|
|
|
CmdReceiveMessageResp: message => {
|
|
|
|
|
console.log("接收消息响应", message);
|
|
|
|
|
addMessage(message.friendMessage || message.chatroomMessage);
|
|
|
|
|
// 在这里添加具体的处理逻辑
|
|
|
|
|
},
|
|
|
|
|
//收到消息
|
|
|
|
|
CmdNewMessage: (message: Messages) => {
|
|
|
|
|
// 在这里添加具体的处理逻辑
|
|
|
|
|
receivedMsg(message.friendMessage || message.chatroomMessage);
|
|
|
|
|
},
|
|
|
|
|
CmdFriendInfoChanged: message => {
|
|
|
|
|
// console.log("好友信息变更", message);
|
|
|
|
|
// 在这里添加具体的处理逻辑
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 登录响应
|
|
|
|
|
CmdSignInResp: message => {
|
|
|
|
|
console.log("登录响应", message);
|
|
|
|
|
// 在这里添加具体的处理逻辑
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
CmdDownloadVideoResult: message => {
|
|
|
|
|
// 在这里添加具体的处理逻辑
|
2025-09-17 10:20:31 +08:00
|
|
|
console.log("视频下载结果:", message);
|
|
|
|
|
// setVideoUrl(message.friendMessageId, message.url);
|
|
|
|
|
},
|
|
|
|
|
|
2025-09-17 14:57:58 +08:00
|
|
|
CmdFetchMomentResult: message => {
|
|
|
|
|
addMomentCommon(message.result);
|
|
|
|
|
updateMomentCommonLoading(false);
|
|
|
|
|
},
|
|
|
|
|
|
2025-09-18 15:25:33 +08:00
|
|
|
CmdNotify: async (message: WebSocketMessage) => {
|
|
|
|
|
console.log("通知消息", message);
|
|
|
|
|
// 在这里添加具体的处理逻辑
|
|
|
|
|
if (message.notify == "Auth failed") {
|
|
|
|
|
// 被踢出时删除所有缓存数据
|
|
|
|
|
localStorage.clear();
|
|
|
|
|
// 删除
|
|
|
|
|
await db.kfUsers.clear();
|
|
|
|
|
await db.weChatGroup.clear();
|
|
|
|
|
await db.contracts.clear();
|
|
|
|
|
await db.newContractList.clear();
|
|
|
|
|
window.location.href = "/login";
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
2025-09-18 17:58:33 +08:00
|
|
|
//撤回消息
|
|
|
|
|
CmdMessageRecalled: message => {
|
|
|
|
|
const MessageId = message.friendMessageId || message.chatroomMessageId;
|
|
|
|
|
recallMessage(MessageId);
|
|
|
|
|
// {
|
|
|
|
|
// "friendMessageId": 745007874,
|
|
|
|
|
// "chatroomMessageId": 0,
|
|
|
|
|
// "seq": 2076470,
|
|
|
|
|
// "cmdType": "CmdMessageRecalled"
|
|
|
|
|
// }
|
|
|
|
|
},
|
|
|
|
|
|
2025-09-11 15:00:57 +08:00
|
|
|
// 可以继续添加更多处理器...
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 默认处理器
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
};
|