1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | "use strict";
|
15 |
|
16 | var fluid = require("infusion"),
|
17 | kettle = fluid.registerNamespace("kettle");
|
18 |
|
19 | fluid.require("ws", require, "kettle.npm.ws");
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | fluid.defaults("kettle.server.ws", {
|
26 | members: {
|
27 | wsServer: "@expand:kettle.server.ws.create({that}, {that}.dispatcher, {that}.options.wsServerOptions, {that}.httpServer)"
|
28 | },
|
29 | wsServerOptions: {
|
30 | disableHixie: true
|
31 | },
|
32 | listeners: {
|
33 | "onStopped.shredWs": "kettle.server.ws.shred({that})"
|
34 | }
|
35 | });
|
36 |
|
37 |
|
38 |
|
39 | kettle.server.ws.fakeResponse = function () {
|
40 | return {};
|
41 | };
|
42 |
|
43 | kettle.server.ws.create = function (server, dispatcher, wsServerOptions, httpServer) {
|
44 | fluid.log("Initializing the ws server");
|
45 | var options = fluid.extend({
|
46 | server: httpServer,
|
47 |
|
48 |
|
49 | verifyClient: function (info, callback) {
|
50 | dispatcher(info.req, kettle.server.ws.fakeResponse(), callback, {expectedRequestGrade: "kettle.request.ws"});
|
51 | }
|
52 | }, wsServerOptions);
|
53 | var wsServer = new kettle.npm.ws.Server(options);
|
54 | wsServer.on("connection", function (ws, req) {
|
55 | var request = req.fluidRequest;
|
56 | fluid.log("Received WebSockets connection on path ", req.url);
|
57 | request.ws = ws;
|
58 | kettle.withRequest(request, function () {
|
59 | request.events.onBindWs.fire(request, ws);
|
60 | })();
|
61 | });
|
62 | return wsServer;
|
63 | };
|
64 |
|
65 | kettle.server.ws.shred = function (that) {
|
66 | delete that.ws;
|
67 | };
|