import { HazelReader, HazelWriter } from "@skeldjs/util"; import { PacketDecoderConfig } from "./misc"; export declare enum MessageDirection { Clientbound = 0, Serverbound = 1 } export interface Serializable { messageType: string; messageTag: number; children?: Serializable[]; serializeToWriter(writer: HazelWriter, direction: MessageDirection, decoder: PacketDecoder): void; } export type GetSerialized = T extends { new (...args: any[]): infer X; } ? X : never; export interface Deserializable { messageType: string; messageTag: number; new (...args: any[]): Serializable; deserializeFromReader(reader: HazelReader, direction: MessageDirection, decoder: PacketDecoder): Serializable; } export type MessageMapKey = `${string}:${number}`; export type MessageListener = (message: T, direction: MessageDirection, context: ContextType) => void; export declare class PacketDecoder { config: PacketDecoderConfig; listeners: Map[]>; types: Map; constructor(config?: Partial); /** * Reset the packet decoder, removing all custom packets and removing listeners. */ reset(): void; clear(): void; /** * Register a message or several messages to the packet decoder. * @param messageClasses The packet or packets to register. */ register(...messageClasses: Deserializable[]): void; /** * Emit a decoded message to all listeners concurrently, also emits the message's children recursively. * @param message The message to emit. * @param direction The direction that the message was sent. * @param context Additional metadata for the message, e.g. the context. */ emitDecoded(message: Serializable, direction: MessageDirection, context: ContextType): Promise; /** * Emit a decoded message to all listeners serially, also emits the message's children recursively. * @param message The message to emit. * @param direction The direction that the message was sent. * @param context Additional metadata for the message, e.g. the context. */ emitDecodedSerial(message: Serializable, direction: MessageDirection, context: ContextType): Promise; emit(message: Serializable, direction: MessageDirection, context: ContextType): Promise; emitSerial(message: Serializable, direction: MessageDirection, context: ContextType): Promise; /** * Get all listeners for a packet. * @param messageClass The packet to get listeners for. * @returns All listeners for the packet. */ getListeners(messageClass: Deserializable): MessageListener, ContextType>[]; /** * Listen to a message being sent through the decoder. * @param messageClass The message to listen for. * @param listener The callback for when the message is decoded. * @returns A function to remove the listener. */ on(messageClass: T, listener: MessageListener, ContextType>): () => void; /** * Listen to any of several messages being sent through the decoder. * @param messageClass The messages to listen for. * @param listener The callback for when one of the messages is decoded. * @returns A function to remove the listener. */ on(messageClass: T, listener: MessageListener, ContextType>): () => void; /** * Remove a listener from a message. * @param messageClass The message to listen for. * @param listener The listener to remove. */ off(messageClass: T, listener: MessageListener, ContextType>): void; /** * Remove a listener from several messages being listened to. * @param messageClass The message to listen for. * @param listener The listener to remove. */ off(messageClass: T, listener: MessageListener, ContextType>): void; /** * Listen to a message being sent through the decoder once. * @param messageClass The message to listen for. * @param listener The callback for when the message is decoded. * @returns A function to remove the listener. */ once(messageClass: T, listener: MessageListener, ContextType>): () => void; /** * Listen to any of several messages being sent through the decoder once. * @param messageClass The messages to listen for. * @param listener The callback for when one of the messages is decoded. * @returns A function to remove the listener. */ once(messageClass: T, listener: MessageListener, ContextType>): () => void; /** * Asynchronously wait for a message to be decoded. * @param messageClass The message to listen for. * @returns A promise containing the message, direciton and context metadata for the message. */ wait(messageClass: T): Promise<{ message: GetSerialized; direction: MessageDirection; context: ContextType; }>; /** * Asynchronously wait for a specific message to be decoded. * @param messageClass The message to listen for. * @param filter A filter for the message to wait for. * @returns A function to remove the listener. */ waitf(messageClass: T, filter: (message: GetSerialized, direction: MessageDirection, context: ContextType) => boolean): Promise<{ message: GetSerialized; direction: MessageDirection; context: ContextType; }>; private _parse; /** * Write a buffer or reader to the decoder. * @param reader The buffer or reader to decode. * @param direction The direction that the packet was sent. * @param context Additional metadata for the context. */ write(reader: Buffer | HazelReader, direction: MessageDirection | undefined, context: ContextType): Promise; /** * Parse a buffer or reader in place, without emitting the resultant message. * @param reader The buffer or reader to parse. * @param direction The direction that the packet was sent. * @returns The parsed message. */ parse(reader: Buffer | HazelReader, direction?: MessageDirection): Serializable | null; } //# sourceMappingURL=PacketDecoder.d.ts.map