import { PacketHighwaySession } from "@/core/packet/highway/session"; import { LogWrapper } from "@/common/log"; import { PacketPacker } from "@/core/packet/packer"; import { PacketClient } from "@/core/packet/client/client"; import { NativePacketClient } from "@/core/packet/client/nativeClient"; import { wsPacketClient } from "@/core/packet/client/wsClient"; import { NapCatCore } from "@/core"; type clientPriority = { [key: number]: typeof PacketClient; } const clientPriority: clientPriority = { 10: NativePacketClient, 1: wsPacketClient, }; export class PacketSession { readonly logger: LogWrapper; readonly client: PacketClient; readonly packer: PacketPacker; readonly highwaySession: PacketHighwaySession; constructor(core: NapCatCore) { this.logger = core.context.logger; this.client = this.judgeClient(core); this.packer = new PacketPacker(this.logger, this.client); this.highwaySession = new PacketHighwaySession(this.logger, this.client, this.packer); } private judgeClient(core: NapCatCore): PacketClient { let selectedClient: typeof PacketClient | null = null; let maxScore = -1; for (const key in clientPriority) { const priority = parseInt(key); const ClientClass = clientPriority[priority]; const score = priority * ClientClass.compatibilityScore(core.context.logger); if (score > maxScore) { maxScore = score; selectedClient = ClientClass; } } if (!selectedClient) { throw new Error("No compatible PacketClient found"); } this.logger.log(`[Packet] 自动选择了: ${selectedClient.name}`); return selectedClient.create(core); } }