From 6a16a42d0c1d744b1857d8f0e1c75f8ba877b2f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Mon, 22 Jul 2024 18:49:25 +0800 Subject: [PATCH] feat: refactor send --- src/core/src/apis/msg.ts | 146 +++++++++++++++++++++------------------ 1 file changed, 80 insertions(+), 66 deletions(-) diff --git a/src/core/src/apis/msg.ts b/src/core/src/apis/msg.ts index 4696022e..bad157c4 100644 --- a/src/core/src/apis/msg.ts +++ b/src/core/src/apis/msg.ts @@ -7,6 +7,7 @@ import { MsgListener, onGroupFileInfoUpdateParamType } from '@/core/listeners'; import { GeneralCallResult } from '@/core/services/common'; import { randomUUID } from 'crypto'; import { MessageUnique } from '../../../common/utils/MessageUnique'; +import { NTEventDispatch } from '@/common/utils/EventTask'; setTimeout(() => { napCatCore.onLoginSuccess(() => { @@ -34,7 +35,7 @@ setTimeout(() => { }); }, 100); -const sendMessagePool: Record void | Promise) | null> = {};// peerUid: callbackFunc +// const sendMessagePool: Record void | Promise) | null> = {};// peerUid: callbackFunc const sendSuccessCBMap: Record boolean | Promise) | null> = {};// uuid: callbackFunc @@ -51,19 +52,19 @@ msgListener.onGroupFileInfoUpdate = (groupFileListResult: onGroupFileInfoUpdateP } }; -msgListener.onAddSendMsg = (msgRecord: RawMessage) => { - // console.log("sent msg", msgRecord, sendMessagePool); - for (const [uuid, cb] of sentMsgTasks) { - cb(msgRecord); - sentMsgTasks.delete(uuid); - } - if (sendMessagePool[msgRecord.peerUid]) { - const r = sendMessagePool[msgRecord.peerUid]?.(msgRecord); - if (r instanceof Promise) { - r.then().catch(logError); - } - } -}; +// msgListener.onAddSendMsg = (msgRecord: RawMessage) => { +// // console.log("sent msg", msgRecord, sendMessagePool); +// for (const [uuid, cb] of sentMsgTasks) { +// cb(msgRecord); +// sentMsgTasks.delete(uuid); +// } +// if (sendMessagePool[msgRecord.peerUid]) { +// const r = sendMessagePool[msgRecord.peerUid]?.(msgRecord); +// if (r instanceof Promise) { +// r.then().catch(logError); +// } +// } +// }; msgListener.onMsgInfoListUpdate = (msgInfoList: RawMessage[]) => { msgInfoList.forEach(msg => { @@ -166,59 +167,72 @@ export class NTQQMsgApi { peerUid: peer.peerUid }, msgIds); } - - static async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000): Promise { - const peerUid = peer.peerUid; - // 等待上一个相同的peer发送完 - let checkLastSendUsingTime = 0; - const waitLastSend: () => Promise = async () => { - if (checkLastSendUsingTime > timeout) { - throw ('发送超时'); - } - const lastSending = sendMessagePool[peer.peerUid]; - if (lastSending) { - // log("有正在发送的消息,等待中...") - await sleep(500); - checkLastSendUsingTime += 500; - return await waitLastSend(); - } else { - return; - } - }; - await waitLastSend(); - - return new Promise(async (resolve, reject) => { - let completed = false; - let sentMessage: RawMessage | null = null; - const sendSuccessCBId = randomUUID() as string; - sendSuccessCBMap[sendSuccessCBId] = (msgRecord: RawMessage) => { - console.log(msgRecord); - if (msgRecord.msgId === sentMessage?.msgId) { - if (msgRecord.sendStatus === 2) { - delete sendSuccessCBMap[sendSuccessCBId]; - completed = true; - resolve(msgRecord); - return true; - } - return false; - } - return false; - }; - sendMessagePool[peerUid] = async (rawMessage: RawMessage) => { - // console.log('收到sent 消息', rawMessage.msgId); - delete sendMessagePool[peerUid]; - sentMessage = rawMessage; - }; - setTimeout(() => { - if (completed) return; - delete sendMessagePool[peerUid]; - delete sendSuccessCBMap[sendSuccessCBId]; - reject('发送超时'); - }, timeout); - let msgId = await NTQQMsgApi.getMsgUnique(await NTQQMsgApi.getServerTime()); - const result = napCatCore.session.getMsgService().sendMsg(msgId, peer, msgElements, new Map()); - }); + static async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) { + let msgId = await NTQQMsgApi.getMsgUnique(await NTQQMsgApi.getServerTime()); + let data = await NTEventDispatch.CallNormalEvent<(msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map) => Promise, (msgList: RawMessage[]) => void>( + 'NodeIKernelMsgService/sendMsg', + 'NodeIKernelMsgListener/onMsgInfoListUpdate', + timeout, + 1, + () => true, + msgId, + peer, + msgElements, + new Map() + ); + //const result = napCatCore.session.getMsgService().sendMsg(msgId, peer, msgElements, new Map()); } + // static async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000): Promise { + // const peerUid = peer.peerUid; + // // 等待上一个相同的peer发送完 + // let checkLastSendUsingTime = 0; + // const waitLastSend: () => Promise = async () => { + // if (checkLastSendUsingTime > timeout) { + // throw ('发送超时'); + // } + // const lastSending = sendMessagePool[peer.peerUid]; + // if (lastSending) { + // // log("有正在发送的消息,等待中...") + // await sleep(500); + // checkLastSendUsingTime += 500; + // return await waitLastSend(); + // } else { + // return; + // } + // }; + // await waitLastSend(); + + // return new Promise(async (resolve, reject) => { + // let completed = false; + // let sentMessage: RawMessage | null = null; + // const sendSuccessCBId = randomUUID() as string; + // sendSuccessCBMap[sendSuccessCBId] = (msgRecord: RawMessage) => { + // if (msgRecord.msgId === sentMessage?.msgId) { + // if (msgRecord.sendStatus === 2) { + // delete sendSuccessCBMap[sendSuccessCBId]; + // completed = true; + // resolve(msgRecord); + // return true; + // } + // return false; + // } + // return false; + // }; + // sendMessagePool[peerUid] = async (rawMessage: RawMessage) => { + // // console.log('收到sent 消息', rawMessage.msgId); + // delete sendMessagePool[peerUid]; + // sentMessage = rawMessage; + // }; + // setTimeout(() => { + // if (completed) return; + // delete sendMessagePool[peerUid]; + // delete sendSuccessCBMap[sendSuccessCBId]; + // reject('发送超时'); + // }, timeout); + // let msgId = await NTQQMsgApi.getMsgUnique(await NTQQMsgApi.getServerTime()); + // const result = napCatCore.session.getMsgService().sendMsg(msgId, peer, msgElements, new Map()); + // }); + // } static async getMsgUnique(time: string) { return napCatCore.session.getMsgService().getMsgUniqueId(time); }