/* * https://github.com/morethanwords/tweb * Copyright (C) 2019-2021 Eduard Kuzmenko * https://github.com/morethanwords/tweb/blob/master/LICENSE */ import { MOUNT_CLASS_TO } from "../../config/debug"; export class AppMessagesIdsManager { private static MESSAGE_ID_INCREMENT = 0x10000; private static MESSAGE_ID_OFFSET = 0xFFFFFFFF; private tempNum = 0; public generateMessageId(messageId: number, temp = false) { const q = AppMessagesIdsManager.MESSAGE_ID_OFFSET; const num = temp ? ++this.tempNum : 0; if(messageId >= q) { if(temp) { return messageId + (num & (AppMessagesIdsManager.MESSAGE_ID_INCREMENT - 1)); } return messageId; } return q + (messageId * AppMessagesIdsManager.MESSAGE_ID_INCREMENT + (num & (AppMessagesIdsManager.MESSAGE_ID_INCREMENT - 1))); } /** * * will ignore outgoing offset */ public getServerMessageId(messageId: number) { return this.clearMessageId(messageId, true); } public clearMessageId(messageId: number, toServer?: boolean) { const q = AppMessagesIdsManager.MESSAGE_ID_OFFSET; if(messageId < q) { // id 0 -> mid 0xFFFFFFFF, so 0xFFFFFFFF must convert to 0 return messageId; } const l = AppMessagesIdsManager.MESSAGE_ID_INCREMENT - 1; const used = messageId & l; if(used !== l) { messageId -= used + 1; } return toServer ? (messageId - q) / AppMessagesIdsManager.MESSAGE_ID_INCREMENT : messageId; } public incrementMessageId(messageId: number, increment: number) { return this.generateMessageId(this.getServerMessageId(messageId) + increment); } }