UNPKG

@rbxts/tether

Version:

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

26 lines (25 loc) 1.4 kB
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]>; };