This is a common way to use socketio-wildcard
in the doc
var io = require('socket.io')();
var middleware = require('socketio-wildcard')();
io.use(middleware);
io.on('connection', function(socket) {
socket.on('*', function(packet){
// client.emit('foo', 'bar', 'baz')
packet.data === ['foo', 'bar', 'baz']
});
});
io.listen(8000);
How can I achieve it with Nest like:
...
import socketioWildcard from 'socketio-wildcard'
....
@SubscribeMessage('*')
onEvent(): Observable<WsResponse<number>> {
return from([1, 2, 3]).pipe(
map(item => ({ event: 'events_from_server', data: item })),
)
}
See https://docs.nestjs.com/websockets/adapter Extend socket.io chapter.
For example:
export class WildcardsIoAdapter extends IoAdapter {
createIOServer(port: number, options?: any): any {
const server = super.createIOServer(port, options);
server.use(middleware);
return server;
}
}
@kamilmysliwiec It does not work!
/Users/jackple/Documents/node/showcase/node_modules/socketio-wildcard/index.js:6
var emit = Emitter.prototype.emit
^
TypeError: Cannot read property 'emit' of undefined
at Array.module.exports (/Users/jackple/Documents/node/showcase/node_modules/socketio-wildcard/index.js:6:32)
at run (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/namespace.js:124:11)
at Namespace.run (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/namespace.js:136:3)
at Namespace.add (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/namespace.js:164:8)
at Client.doConnect (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/client.js:97:20)
at Client.connect (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/client.js:66:17)
at Server.onconnection (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/index.js:434:10)
at emitOne (events.js:116:13)
at Server.emit (events.js:211:7)
at Server.handshake (/Users/jackple/Documents/node/showcase/node_modules/engine.io/lib/server.js:338:8)
at /Users/jackple/Documents/node/showcase/node_modules/engine.io/lib/server.js:232:12
at Server.checkRequest (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/index.js:76:51)
at Server.verify (/Users/jackple/Documents/node/showcase/node_modules/engine.io/lib/server.js:168:17)
at Server.handleRequest (/Users/jackple/Documents/node/showcase/node_modules/engine.io/lib/server.js:222:8)
at Server.<anonymous> (/Users/jackple/Documents/node/showcase/node_modules/engine.io/lib/server.js:467:14)
at Server.<anonymous> (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/index.js:343:16)
Base on the error, I resolve this problem by:
import { IoAdapter } from '@nestjs/websockets'
import { EventEmitter } from 'events'
import * as socketioWildcard from 'socketio-wildcard'
import { Server } from 'socket.io'
export default class WildcardsIoAdapter extends IoAdapter {
createIOServer(port: number, options?: any): any {
const server: Server = super.createIOServer(port, options)
server.use(socketioWildcard(EventEmitter))
return server
}
}
This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.
Most helpful comment
Base on the error, I resolve this problem by: