UNPKG

@rbxts/tether

Version:

A message-based networking solution for Roblox with automatic binary serialization and type validation

51 lines (50 loc) 4.16 kB
import type { BaseMessage, SerializedPacket } from "./structs"; type DropRequestSymbol = symbol & { _drop_req?: undefined; }; export declare const DropRequest: DropRequestSymbol; export type ClientMiddleware<Data = unknown> = { _client?: void; } & ((player: Player | Player[], ctx: MiddlewareContext<Data>) => DropRequestSymbol | void); export type ServerMiddleware<Data = unknown> = { _server?: void; } & SharedMiddleware<Data>; export type SharedMiddleware<Data = unknown> = (ctx: MiddlewareContext<Data>) => DropRequestSymbol | void; export type Middleware<Data = unknown> = ServerMiddleware<Data> & ClientMiddleware<Data> & SharedMiddleware<Data>; export interface MiddlewareContext<Data = unknown, Message extends BaseMessage = BaseMessage> { readonly message: Message; data: Data; getRawData: () => SerializedPacket; } type RequestDropCallback = (message: BaseMessage, reason?: string) => void; export declare class MiddlewareProvider<MessageData> { private readonly clientGlobalMiddlewares; private readonly serverGlobalMiddlewares; private readonly clientMiddlewares; private readonly serverMiddlewares; private readonly requestDroppedCallbacks; onRequestDropped(callback: RequestDropCallback): () => void; /** @hidden */ notifyRequestDropped(message: BaseMessage, reason?: string): void; /** @hidden */ getClient<Kind extends keyof MessageData>(message: Kind & BaseMessage): ClientMiddleware<MessageData[Kind]>[]; /** @hidden */ getServer<Kind extends keyof MessageData>(message: Kind & BaseMessage): ServerMiddleware<MessageData[Kind]>[]; /** @hidden */ getClientGlobal<Data>(): ClientMiddleware<Data>[]; /** @hidden */ getServerGlobal<Data>(): ServerMiddleware<Data>[]; useClient<Kind extends keyof MessageData>(message: Kind & BaseMessage, middlewares: ClientMiddleware<MessageData[Kind]> | readonly ClientMiddleware<MessageData[Kind]>[] | ClientMiddleware | readonly ClientMiddleware[], order?: number): this; useServer<Kind extends keyof MessageData>(message: Kind & BaseMessage, middlewares: ServerMiddleware<MessageData[Kind]> | readonly ServerMiddleware<MessageData[Kind]>[] | ServerMiddleware | readonly ServerMiddleware[], order?: number): this; useShared<Kind extends keyof MessageData>(message: Kind & BaseMessage, middlewares: SharedMiddleware<MessageData[Kind]> | readonly SharedMiddleware<MessageData[Kind]>[] | SharedMiddleware | readonly SharedMiddleware[], order?: number): this; useClientGlobal(middlewares: ClientMiddleware | readonly ClientMiddleware[], order?: number): this; useServerGlobal(middlewares: ServerMiddleware | readonly ServerMiddleware[], order?: number): this; useSharedGlobal(middlewares: SharedMiddleware | readonly SharedMiddleware[], order?: number): this; deleteSharedGlobal<Kind extends keyof MessageData>(middlewares: SharedMiddleware<MessageData[Kind]> | readonly SharedMiddleware<MessageData[Kind]>[] | SharedMiddleware | readonly SharedMiddleware[]): void; deleteClientGlobal<Kind extends keyof MessageData>(middlewares: ClientMiddleware<MessageData[Kind]> | readonly ClientMiddleware<MessageData[Kind]>[] | ClientMiddleware | readonly ClientMiddleware[]): void; deleteServerGlobal<Kind extends keyof MessageData>(middlewares: ServerMiddleware<MessageData[Kind]> | readonly ServerMiddleware<MessageData[Kind]>[] | ServerMiddleware | readonly ServerMiddleware[]): void; deleteShared<Kind extends keyof MessageData>(message: Kind & BaseMessage, middlewares: SharedMiddleware<MessageData[Kind]> | readonly SharedMiddleware<MessageData[Kind]>[] | SharedMiddleware | readonly SharedMiddleware[]): void; deleteClient<Kind extends keyof MessageData>(message: Kind & BaseMessage, middlewares: ClientMiddleware<MessageData[Kind]> | readonly ClientMiddleware<MessageData[Kind]>[] | ClientMiddleware | readonly ClientMiddleware[]): void; deleteServer<Kind extends keyof MessageData>(message: Kind & BaseMessage, middlewares: ServerMiddleware<MessageData[Kind]> | readonly ServerMiddleware<MessageData[Kind]>[] | ServerMiddleware | readonly ServerMiddleware[]): void; } export {};