socket.io-controllers
v1.1.0
Published
Use ES6 Class with Socket.IO
Downloads
12
Maintainers
Readme
socket.io-controllers
Description
Use ES6 Class with Socket.IO
Installation
$ npm install socket.io-controllers --save
Usage
Let's say that our application will be using Koa and Socket.IO.
- app.js
const http = require('http');
const path = require('path');
const Koa = require('koa');
const SocketIO = require('socket.io');
const { setupSocketIOControllers } = require('socket.io-controllers');
const app = new Koa();
const server = http.createServer(app.callback());
app.context.io = setupSocketIOControllers({
server,
controllers: {
dir: path.resolve(__dirname, 'socket-controllers')
// suffix: '.sc.js' // Default: .socket-controller.
}
});
server.listen(3000, () => console.log('Server running on port 3000'));
Create a socket-controllers folder (inside we will define our Socket Controller Classes)
- socket-controllers/default.socket-controller.js
const { SocketController } = require('socket.io-controllers');
class DefaultSocketController extends SocketController {
/**
* The "use" function will be our socket middleware.
*
* Call this.next() anytime to continue.
*
* Or call this.next(new Error('some error')) to deny access.
*/
use() {
const { socket, next } = this;
const { authToken } = socket.handshake.query;
// Here we can do some check with the token
if (authToken === '123456') {
this.next();
} else {
this.next(new Error('Authentication Failed.'));
}
}
/**
* We define our socket event handler like the following.
*
* On client side for example:
*
* socket.emit('SomeCustomEvent', payload)
*
* or with acknowledgement
*
* socket.emit('SomeCustomEvent', payload, ack => console.log(ack))
*
* You have access to socket.io server (io) and current socket (socket)
*/
onSomeCustomEvent(payload) {
const { io, socket } = this;
}
onSomeCustomEvent2(payload, fn) {}
}
exports.DefaultSocketController = DefaultSocketController;
What about namespacing?
class DefaultSocketController extends SocketController {} // io.of('/')
class AuthSocketController extends SocketController {} // io.of('/auth')
class ChatSocketController extends SocketController {} // io.of('/chat')
LICENSE
MIT