UNPKG

1.13 kBJavaScriptView Raw
1"use strict";
2
3const WebSocketServer = require('ws').Server,
4 debug = require('debug')('koa:websockets'),
5 compose = require('koa-compose'),
6 co = require('co');
7
8function KoaWebSocketServer (app) {
9 this.app = app;
10 this.middleware = [];
11}
12
13KoaWebSocketServer.prototype.listen = function (server) {
14 this.server = new WebSocketServer({
15 server: server
16 });
17 this.server.on('connection', this.onConnection.bind(this));
18};
19
20KoaWebSocketServer.prototype.onConnection = function(socket) {
21 socket.on('error', function (err) {
22 debug('Error occurred:', err);
23 });
24 const fn = co.wrap(compose(this.middleware));
25 socket.path = socket.upgradeReq.url;
26 fn.bind(socket).call().catch(function(err) {
27 debug(err);
28 });
29};
30
31KoaWebSocketServer.prototype.use = function (fn) {
32 this.middleware.push(fn);
33 return this;
34};
35
36module.exports = function (app) {
37 const oldListen = app.listen;
38 app.listen = function () {
39 debug('Attaching server...');
40 app.server = oldListen.apply(app, arguments);
41 app.ws.listen(app.server);
42 return app.server;
43 };
44 app.ws = new KoaWebSocketServer(app);
45 return app;
46};