ws.interfaces.json
1 { 2 "WebSocketAdapter Interface": { 3 "prefix": ["ns_class_adapter", "class Adapter", "implements WebSocketAdapter"], 4 "scope": "typescript", 5 "body": ["import * as WebSocket from 'ws';", "import { WebSocketAdapter, INestApplicationContext } from '@nestjs/common';", "import { MessageMappingProperties } from '@nestjs/websockets';", "import { Observable, fromEvent, EMPTY } from 'rxjs';", "import { mergeMap, filter } from 'rxjs/operators';", "", "export class $1Adapter implements WebSocketAdapter {", " constructor(private app: INestApplicationContext) {}", "", " create(port: number, options: any = {}): any {", " return new WebSocket.Server({ port, ...options });", " }", "", " bindClientConnect(server, callback: Function) {", " server.on('connection', callback);", " }", "", " bindMessageHandlers(", " client: WebSocket,", " handlers: MessageMappingProperties[],", " process: (data: any) => Observable<any>,", " ) {", " fromEvent(client, 'message')", " .pipe(", " mergeMap(data => this.bindMessageHandler(data, handlers, process)),", " filter(result => result),", " )", " .subscribe(response => client.send(JSON.stringify(response)));", " }", "", " bindMessageHandler(", " buffer,", " handlers: MessageMappingProperties[],", " process: (data: any) => Observable<any>,", " ): Observable<any> {", " const message = JSON.parse(buffer.data);", " const messageHandler = handlers.find(", " handler => handler.message === message.event,", " );", " if (!messageHandler) {", " return EMPTY;", " }", " return process(messageHandler.callback(message.data));", " }", "", " close(server) {", " server.close();", " }", "}", ""], 6 "description": "Example custom WebSocket adapter implementation using the 'ws' package." 7 } 8 }