mirror of
https://github.com/NapNeko/NapCatQQ.git
synced 2024-11-21 09:36:35 +00:00
refatcor: sendmsg
This commit is contained in:
parent
8ca0d40f05
commit
b783d6f928
@ -163,11 +163,14 @@ export class NTEventWrapper {
|
|||||||
resolve([retEvent as Awaited<ReturnType<EventType>>, ...retData!]);
|
resolve([retEvent as Awaited<ReturnType<EventType>>, ...retData!]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const Timeouter = setTimeout(databack, timeout);
|
|
||||||
|
|
||||||
const ListenerNameList = ListenerName.split('/');
|
const ListenerNameList = ListenerName.split('/');
|
||||||
const ListenerMainName = ListenerNameList[0];
|
const ListenerMainName = ListenerNameList[0];
|
||||||
const ListenerSubName = ListenerNameList[1];
|
const ListenerSubName = ListenerNameList[1];
|
||||||
|
|
||||||
|
const Timeouter = setTimeout(databack, timeout);
|
||||||
|
|
||||||
const eventCallbak = {
|
const eventCallbak = {
|
||||||
timeout: timeout,
|
timeout: timeout,
|
||||||
createtime: Date.now(),
|
createtime: Date.now(),
|
||||||
@ -191,7 +194,6 @@ export class NTEventWrapper {
|
|||||||
this.EventTask.get(ListenerMainName)?.get(ListenerSubName)?.set(id, eventCallbak);
|
this.EventTask.get(ListenerMainName)?.get(ListenerSubName)?.set(id, eventCallbak);
|
||||||
this.CreatListenerFunction(ListenerMainName);
|
this.CreatListenerFunction(ListenerMainName);
|
||||||
const EventFunc = this.CreatEventFunction<EventType>(EventName);
|
const EventFunc = this.CreatEventFunction<EventType>(EventName);
|
||||||
//console.log("测试打点", args);
|
|
||||||
retEvent = await EventFunc!(...(args as any[]));
|
retEvent = await EventFunc!(...(args as any[]));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,11 @@ import { friends, groups, selfInfo } from '@/core/data';
|
|||||||
import { log, logWarn } from '@/common/utils/log';
|
import { log, logWarn } from '@/common/utils/log';
|
||||||
import { sleep } from '@/common/utils/helper';
|
import { sleep } from '@/common/utils/helper';
|
||||||
import { napCatCore, NodeIKernelMsgService, NTQQUserApi } from '@/core';
|
import { napCatCore, NodeIKernelMsgService, NTQQUserApi } from '@/core';
|
||||||
import { onGroupFileInfoUpdateParamType } from '@/core/listeners';
|
import { NodeIKernelMsgListener, onGroupFileInfoUpdateParamType } from '@/core/listeners';
|
||||||
import { GeneralCallResult } from '@/core/services/common';
|
import { GeneralCallResult } from '@/core/services/common';
|
||||||
import { MessageUnique } from '../../../common/utils/MessageUnique';
|
import { MessageUnique } from '../../../common/utils/MessageUnique';
|
||||||
import { NTEventDispatch } from '@/common/utils/EventTask';
|
import { NTEventDispatch } from '@/common/utils/EventTask';
|
||||||
|
let MsgSendMode = 0;
|
||||||
async function LoadMessageIdList(Peer: Peer, msgId: string) {
|
async function LoadMessageIdList(Peer: Peer, msgId: string) {
|
||||||
let msgList = await NTQQMsgApi.getMsgHistory(Peer, msgId, 50);
|
let msgList = await NTQQMsgApi.getMsgHistory(Peer, msgId, 50);
|
||||||
for (let j = 0; j < msgList.msgList.length; j++) {
|
for (let j = 0; j < msgList.msgList.length; j++) {
|
||||||
@ -118,6 +119,9 @@ export class NTQQMsgApi {
|
|||||||
}
|
}
|
||||||
static async getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, z: boolean) {
|
static async getMsgsBySeqAndCount(peer: Peer, seq: string, count: number, desc: boolean, z: boolean) {
|
||||||
return await napCatCore.session.getMsgService().getMsgsBySeqAndCount(peer, seq, count, desc, z);
|
return await napCatCore.session.getMsgService().getMsgsBySeqAndCount(peer, seq, count, desc, z);
|
||||||
|
}
|
||||||
|
static async testMode() {
|
||||||
|
|
||||||
}
|
}
|
||||||
static async setMsgRead(peer: Peer) {
|
static async setMsgRead(peer: Peer) {
|
||||||
return napCatCore.session.getMsgService().setMsgRead(peer);
|
return napCatCore.session.getMsgService().setMsgRead(peer);
|
||||||
@ -149,21 +153,17 @@ export class NTQQMsgApi {
|
|||||||
peerUid: peer.peerUid
|
peerUid: peer.peerUid
|
||||||
}, msgIds);
|
}, msgIds);
|
||||||
}
|
}
|
||||||
static async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) {
|
static async sendMsgV2(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) {
|
||||||
|
// function generateMsgId() {
|
||||||
|
// const timestamp = Math.floor(Date.now() / 1000);
|
||||||
|
// const random = Math.floor(Math.random() * Math.pow(2, 32));
|
||||||
|
// const buffer = Buffer.alloc(8);
|
||||||
|
// buffer.writeUInt32BE(timestamp, 0);
|
||||||
|
// buffer.writeUInt32BE(random, 4);
|
||||||
|
// const msgId = BigInt("0x" + buffer.toString('hex')).toString();
|
||||||
|
// return msgId;
|
||||||
|
// }
|
||||||
let msgId = await NTQQMsgApi.getMsgUnique(await NTQQMsgApi.getServerTime());
|
let msgId = await NTQQMsgApi.getMsgUnique(await NTQQMsgApi.getServerTime());
|
||||||
//为MsgId兜底的算法
|
|
||||||
if (!msgId || msgId.length == 0) {
|
|
||||||
function generateMsgId() {
|
|
||||||
const timestamp = Math.floor(Date.now() / 1000);
|
|
||||||
const random = Math.floor(Math.random() * Math.pow(2, 32));
|
|
||||||
const buffer = Buffer.alloc(8);
|
|
||||||
buffer.writeUInt32BE(timestamp, 0);
|
|
||||||
buffer.writeUInt32BE(random, 4);
|
|
||||||
const msgId = BigInt("0x" + buffer.toString('hex')).toString();
|
|
||||||
return msgId;
|
|
||||||
}
|
|
||||||
msgId = generateMsgId();
|
|
||||||
}
|
|
||||||
let data = await NTEventDispatch.CallNormalEvent<
|
let data = await NTEventDispatch.CallNormalEvent<
|
||||||
(msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map<any, any>) => Promise<unknown>,
|
(msgId: string, peer: Peer, msgElements: SendMessageElement[], map: Map<any, any>) => Promise<unknown>,
|
||||||
(msgList: RawMessage[]) => void
|
(msgList: RawMessage[]) => void
|
||||||
@ -192,6 +192,41 @@ export class NTQQMsgApi {
|
|||||||
});
|
});
|
||||||
return retMsg;
|
return retMsg;
|
||||||
}
|
}
|
||||||
|
static async sendMsg(peer: Peer, msgElements: SendMessageElement[], waitComplete = true, timeout = 10000) {
|
||||||
|
//实时结算不进行等待
|
||||||
|
let msgList = await NTQQMsgApi.getLastestMsgByUids(peer);
|
||||||
|
let msgSeq = 0;
|
||||||
|
if (msgList.msgList.length > 0) {
|
||||||
|
msgSeq = parseInt(msgList.msgList[0].msgSeq);
|
||||||
|
//console.log(JSON.stringify(msgList.msgList[0], null, 4));
|
||||||
|
}
|
||||||
|
let SendDate = Math.floor(Date.now() / 1000);
|
||||||
|
let rawMsg: RawMessage | undefined;
|
||||||
|
let EventListener = NTEventDispatch.RegisterListen<NodeIKernelMsgListener['onAddSendMsg']>('NodeIKernelMsgListener/onAddSendMsg', 1, timeout, (msg: RawMessage) => {
|
||||||
|
//console.log(JSON.stringify(msg, null, 4));
|
||||||
|
if (parseInt(msg.msgTime) < SendDate + timeout / 1000 && msg.peerUid == peer.peerUid && (msgList.msgList[0].msgSeq == msgSeq.toString() || msgSeq == 0)) {
|
||||||
|
rawMsg = msg;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}).catch();
|
||||||
|
// let EventListener2 = NTEventDispatch.RegisterListen<NodeIKernelMsgListener['onMsgInfoListUpdate']>('NodeIKernelMsgListener/onMsgInfoListUpdate', 1, timeout,
|
||||||
|
// (msgList: RawMessage[]) => {
|
||||||
|
// for (let msg of msgList) {
|
||||||
|
// if (msg.peerUid == peer.peerUid && rawMsg && rawMsg.msgId == msg.msgId && msg.sendStatus == 2) {
|
||||||
|
// rawMsg = msg;
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return false;
|
||||||
|
// })
|
||||||
|
await NTEventDispatch.CallNoListenerEvent<NodeIKernelMsgService['sendMsg']>('NodeIKernelMsgService/sendMsg', timeout, "0", peer, msgElements, new Map());
|
||||||
|
await EventListener;
|
||||||
|
if (rawMsg) {
|
||||||
|
return rawMsg;
|
||||||
|
}
|
||||||
|
throw new Error('发送消息超时');
|
||||||
|
}
|
||||||
static async getMsgUniqueEx() {
|
static async getMsgUniqueEx() {
|
||||||
let msgId = await NTQQMsgApi.getMsgUnique(await NTQQMsgApi.getServerTime());
|
let msgId = await NTQQMsgApi.getMsgUnique(await NTQQMsgApi.getServerTime());
|
||||||
return msgId;
|
return msgId;
|
||||||
|
@ -226,7 +226,7 @@ export interface IKernelMsgListener {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface NodeIKernelMsgListener {
|
export interface NodeIKernelMsgListener extends IKernelMsgListener {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-misused-new
|
// eslint-disable-next-line @typescript-eslint/no-misused-new
|
||||||
new(listener: IKernelMsgListener): NodeIKernelMsgListener;
|
new(listener: IKernelMsgListener): NodeIKernelMsgListener;
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ export async function sendMsg(peer: Peer, sendElements: SendMessageElement[], de
|
|||||||
throw ('消息体无法解析, 请检查是否发送了不支持的消息类型');
|
throw ('消息体无法解析, 请检查是否发送了不支持的消息类型');
|
||||||
}
|
}
|
||||||
let totalSize = 0;
|
let totalSize = 0;
|
||||||
let timeout = 5000;
|
let timeout = 10000;
|
||||||
try {
|
try {
|
||||||
for (const fileElement of sendElements) {
|
for (const fileElement of sendElements) {
|
||||||
if (fileElement.elementType === ElementType.PTT) {
|
if (fileElement.elementType === ElementType.PTT) {
|
||||||
@ -59,7 +59,7 @@ export async function sendMsg(peer: Peer, sendElements: SendMessageElement[], de
|
|||||||
//且 PredictTime ((totalSize / 1024 / 512) * 1000)不等于Nan
|
//且 PredictTime ((totalSize / 1024 / 512) * 1000)不等于Nan
|
||||||
const PredictTime = totalSize / 1024 / 256 * 1000;
|
const PredictTime = totalSize / 1024 / 256 * 1000;
|
||||||
if (!Number.isNaN(PredictTime)) {
|
if (!Number.isNaN(PredictTime)) {
|
||||||
timeout += PredictTime;// 5S Basic Timeout + PredictTime( For File 512kb/s )
|
timeout += PredictTime;// 10S Basic Timeout + PredictTime( For File 512kb/s )
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError('发送消息计算预计时间异常', e);
|
logError('发送消息计算预计时间异常', e);
|
||||||
@ -170,7 +170,7 @@ export class SendMsg extends BaseAction<OB11PostSendMsg, ReturnDataType> {
|
|||||||
// log("send msg:", peer, sendElements)
|
// log("send msg:", peer, sendElements)
|
||||||
|
|
||||||
const { sendElements, deleteAfterSentFiles } = await createSendElements(messages, group);
|
const { sendElements, deleteAfterSentFiles } = await createSendElements(messages, group);
|
||||||
console.log(peer, JSON.stringify(sendElements,null,2));
|
//console.log(peer, JSON.stringify(sendElements,null,2));
|
||||||
const returnMsg = await sendMsg(peer, sendElements, deleteAfterSentFiles);
|
const returnMsg = await sendMsg(peer, sendElements, deleteAfterSentFiles);
|
||||||
return { message_id: returnMsg!.id! };
|
return { message_id: returnMsg!.id! };
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user