From 703c13f296acc10edcebf54a98957484d39c5a42 Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Fri, 15 Nov 2019 20:53:43 -0300 Subject: [PATCH] Add TypedSocket to server --- src/server/socket.ts | 6 ++---- src/shared/SocketEvent.ts | 28 ++++++++++++++++++++++++++++ src/shared/TypedEmitter.ts | 8 ++++++++ src/shared/index.ts | 2 ++ 4 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 src/shared/SocketEvent.ts create mode 100644 src/shared/index.ts diff --git a/src/server/socket.ts b/src/server/socket.ts index 64d7d0e..9305bc4 100644 --- a/src/server/socket.ts +++ b/src/server/socket.ts @@ -1,13 +1,11 @@ 'use strict' import _debug from 'debug' import map from 'lodash/map' -import { Socket, Server } from 'socket.io' +import { ServerSocket, TypedIO } from '../shared' const debug = _debug('peercalls:socket') -type SocketWithRoom = Socket & { room?: string } - -export default function handleSocket(socket: SocketWithRoom, io: Server) { +export default function handleSocket(socket: ServerSocket, io: TypedIO) { socket.on('signal', payload => { // debug('signal: %s, payload: %o', socket.id, payload) io.to(payload.userId).emit('signal', { diff --git a/src/shared/SocketEvent.ts b/src/shared/SocketEvent.ts new file mode 100644 index 0000000..1014233 --- /dev/null +++ b/src/shared/SocketEvent.ts @@ -0,0 +1,28 @@ +import { TypedEmitter, TypedEmitterKeys } from './TypedEmitter' + +export interface User { + id: string +} + +export interface SocketEvent { + users: { + initiator: string + users: User[] + } + signal: { + userId: string + signal: unknown + } + connect: void + disconnect: void + ready: string +} + +export type ServerSocket = + Omit & + TypedEmitter & + { room?: string } + +export type TypedIO = SocketIO.Server & { + to(roomName: string): TypedEmitter +} diff --git a/src/shared/TypedEmitter.ts b/src/shared/TypedEmitter.ts index 6dd7acb..f761220 100644 --- a/src/shared/TypedEmitter.ts +++ b/src/shared/TypedEmitter.ts @@ -5,6 +5,14 @@ type Callback = (a: A) => void // eslint-disable-next-line type Events = Record +export type TypedEmitterKeys = + 'addListener' | + 'removeListener' | + 'on' | + 'once' | + 'off' | + 'emit' + export interface TypedEmitter extends EventEmitter { addListener(t: K, callback: Callback): this diff --git a/src/shared/index.ts b/src/shared/index.ts new file mode 100644 index 0000000..231f83e --- /dev/null +++ b/src/shared/index.ts @@ -0,0 +1,2 @@ +export * from './SocketEvent' +export * from './TypedEmitter'