@rbxts/tether
Version:
A message-based networking solution for Roblox with automatic binary serialization and type validation
26 lines (25 loc) • 1.4 kB
TypeScript
import type { Modding } from "@flamework/core";
import type { SerializerMetadata, SerializedData, StripMeta } from "@rbxts/serio";
export type MessageCallback<T = unknown> = ServerMessageCallback<T> | ClientMessageCallback<T>;
export type FunctionMessageCallback<T = unknown, R = unknown> = ServerFunctionMessageCallback<T, R> | ClientFunctionMessageCallback<T, R>;
export type ClientMessageCallback<T = unknown> = (data: T) => void;
export type ClientFunctionMessageCallback<T = unknown, R = unknown> = (data: T) => R;
export type ServerMessageCallback<T = unknown> = (player: Player, data: T) => void;
export type ServerFunctionMessageCallback<T = unknown, R = unknown> = (player: Player, data: T) => R;
export type BaseMessage = number;
export interface PacketInfo {
readonly packet: SerializedPacket;
readonly unreliable: boolean;
}
export interface SerializedPacket extends SerializedData {
readonly messageBuf: buffer;
}
export type MessageEvent = (...packets: SerializedPacket[]) => void;
export type Guard<T = unknown> = (value: unknown) => value is T;
export interface MessageMetadata<T> {
readonly guard: Modding.Generic<StripMeta<T>, "guard">;
readonly serializerMetadata: [T] extends [undefined] ? undefined : SerializerMetadata<T>;
}
export type MessageEmitterMetadata<MessageData> = {
readonly [K in keyof MessageData as K]: MessageMetadata<MessageData[K]>;
};