Saltar al contenido
Meeko
Escribe para buscar en las guías y en la referencia de la API. Ábrela desde cualquier página con / o Ctrl K; muévete con las flechas y entra con Intro.
Empezar

Contenidos

En esta página

SocketChannelDefinition

interfaz

Definición de un canal Socket de server/socket/<nombre>.ts: schemas por dirección, guardas y handlers de los eventos del cliente. Se declara con defineSocketChannel.

ts
import type { SocketChannelDefinition } from "@meekojs/meeko/server";

Código fuente src/server/socket/definitions.ts:22

Declaración #

ts
interface SocketChannelDefinition<C extends SchemaMap, S extends SchemaMap, TServices = unknown> {
	clientToServer: C
	serverToClient: S
	auth?: 'required' | 'optional'
	authorize?: (args: { context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>
	authorizeEvent?: (args: { event: keyof C & string; payload: unknown; context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>
	authorizeSend?: (args: { event: keyof S & string; payload: unknown; context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>
	handlers?: { [K in keyof C]?: (args: { payload: Output<C[K]>; context: RequestContext<TServices>; roomId?: string; emit: <E extends keyof S & string>(event: E, payload: Output<S[E]>) => Promise<void> }) => void | Promise<void> }
}

Parámetros de tipo #

C extends SchemaMap

Schemas de los eventos que envía el cliente.

S extends SchemaMap

Schemas de los eventos que envía el servidor.

TServices = unknown

Tipo de los servicios.

Ejemplo #

ts
import type { Schema, SocketChannelDefinition } from "@meekojs/meeko/server";

type Chat = SocketChannelDefinition<{ message: Schema<{ text: string }> }, { message: Schema<{ text: string }> }>;

Propiedades #

clientToServer #

propiedad

clientToServer: C

Schemas de los eventos que envía el cliente; deben venir de shared/.

serverToClient #

propiedad

serverToClient: S

Schemas de los eventos que envía el servidor; deben venir de shared/.

auth #

propiedad opcional

auth?: 'required' | 'optional'

"required" rechaza el handshake sin sesión con 401.

authorize #

propiedad opcional

authorize?: (args: { context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>

Autoriza el handshake y cada entrega; false responde 403.

authorizeEvent #

propiedad opcional

authorizeEvent?: (args: { event: keyof C & string; payload: unknown; context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>

Autoriza cada evento entrante.

authorizeSend #

propiedad opcional

authorizeSend?: (args: { event: keyof S & string; payload: unknown; context: RequestContext<TServices>; roomId?: string }) => boolean | Promise<boolean>

Filtra cada envío a un peer: con false no lo recibe y sigue conectado.

handlers #

propiedad opcional

handlers?: { [K in keyof C]?: (args: { payload: Output<C[K]>; context: RequestContext<TServices>; roomId?: string; emit: <E extends keyof S & string>(event: E, payload: Output<S[E]>) => Promise<void> }) => void | Promise<void> }

Handlers de los eventos del cliente, con el payload validado y emit hacia ese cliente.

Véase también #

¿Te sirvió esta página?

Añadir un comentario

Se envía al elegir «Sí» o «No». Solo se guardan la página, tu respuesta y el comentario: ni cookies ni datos tuyos.

0 de 2000 caracteres

Editar en GitHub: packages/meeko/src/server/socket/definitions.ts