Skip to content
This repository was archived by the owner on Apr 6, 2021. It is now read-only.

Commit c2c6a86

Browse files
committed
debug support; use client from engine.io package
1 parent 7d92d28 commit c2c6a86

File tree

5 files changed

+101
-6
lines changed

5 files changed

+101
-6
lines changed

README.md

+9
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,15 @@ Testing:
3737

3838
npm test
3939

40+
Debugging:
41+
42+
Plugin Config ~ {
43+
debug: true
44+
}
45+
46+
(function() { require(["smith.io"], function (TRANSPORT) { TRANSPORT.setDebug(true); localStorage.debug = "*"; }); })()
47+
(function() { require(["smith.io"], function (TRANSPORT) { TRANSPORT.setDebug(false); localStorage.debug = ""; }); })()
48+
4049

4150
License
4251
=======

package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@
1616
"dependencies": {
1717
"smith": "~0.1.9",
1818
"msgpack-js-browser": "~0.1.3",
19-
"engine.io": "https://github.com/c9/engine.io/tarball/9042f79ee80d70d52ce82cf53815099312fdf5d0",
20-
"engine.io-client": "https://github.com/c9/engine.io-client/tarball/a395f08d83676828f58b27badba72368299c009d"
19+
"engine.io": "https://github.com/c9/engine.io/tarball/7e953da83edfad6f2c11307a1f846232c8093bae"
2120
},
2221
"scripts": {
2322
"test": "node test/all.js"

server-plugin/plugin.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -144,13 +144,13 @@ module.exports = function startup(options, imports, register) {
144144
if (options.registerClientRoutes !== false) {
145145

146146
imports.static.addStatics([{
147-
path: PATH.dirname(require.resolve("engine.io-client/dist/engine.io.js")),
147+
path: PATH.dirname(require.resolve("engine.io/node_modules/engine.io-client/dist/engine.io.js")),
148148
mount: "/engine.io",
149149
rjs: [
150150
{
151151
"name": "engine.io",
152152
"location": "engine.io",
153-
"main": "engine.io.js"
153+
"main": "engine.io" + ((options.debug)?"-dev":"") + ".js"
154154
}
155155
]
156156
}]);

server-plugin/www/client.js

+88-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ define(function(require, exports, module) {
66
var SMITH = require("smith");
77
var EVENTS = require("smith/events-amd");
88

9+
var transports = [];
10+
var debugHandler = null;
911

1012
function inherits(Child, Parent) {
1113
Child.prototype = Object.create(Parent.prototype, { constructor: { value: Child }});
@@ -28,7 +30,15 @@ define(function(require, exports, module) {
2830
}
2931

3032
inherits(Transport, EVENTS.EventEmitter);
31-
33+
34+
Transport.prototype.getUri = function() {
35+
return "http" + ((this.options.secure)?"s":"") + "://" +
36+
this.options.host +
37+
((this.options.port)?":"+this.options.port:"") +
38+
this.options.path +
39+
this.options.resource;
40+
}
41+
3242
Transport.prototype.connect = function(options, callback) {
3343
var _self = this;
3444

@@ -46,6 +56,10 @@ define(function(require, exports, module) {
4656
}
4757
});
4858

59+
_self.socket.on("heartbeat", function () {
60+
_self.emit("heartbeat");
61+
});
62+
4963
_self.socket.on("open", function () {
5064

5165
connecting = false;
@@ -108,6 +122,9 @@ define(function(require, exports, module) {
108122
}
109123

110124
setTimeout(function() {
125+
126+
_self.emit("reconnect", options.reconnectAttempt);
127+
111128
_self.connect({
112129
reconnectAttempt: options.reconnectAttempt,
113130
fireConnect: (options.reconnectAttempt >= 6) ? true : false
@@ -143,8 +160,78 @@ define(function(require, exports, module) {
143160

144161
exports.connect = function(options, callback) {
145162
var transport = new Transport(options, callback);
163+
transports.push(transport);
164+
if (debugHandler) {
165+
debugHandler.hookTransport(transport);
166+
}
146167
transport.connect({}, callback);
147168
return transport;
148169
}
149170

171+
exports.setDebug = function(debug) {
172+
if (debugHandler !== null) {
173+
if (debug) return;
174+
return debugHandler.stop();
175+
} else if (!debug) return;
176+
debugHandler = {
177+
transports: [],
178+
handlers: [],
179+
start: function() {
180+
transports.forEach(debugHandler.hookTransport);
181+
},
182+
stop: function() {
183+
transports.forEach(debugHandler.unhookTransport);
184+
debugHandler = null;
185+
},
186+
hookTransport: function(transport) {
187+
var index = debugHandler.transports.indexOf(transport);
188+
if (index !== -1) return;
189+
190+
console.log("[smith.io:" + transport.getUri() + "] Hook debugger");
191+
192+
var listeners = {};
193+
194+
transport.on("connect", listeners["connect"] = function() {
195+
console.log("[smith.io:" + transport.getUri() + "] Connect");
196+
});
197+
transport.on("reconnect", listeners["reconnect"] = function(attempt) {
198+
console.log("[smith.io:" + transport.getUri() + "] Reconnect: " + attempt);
199+
});
200+
transport.on("disconnect", listeners["disconnect"] = function(reason) {
201+
console.log("[smith.io:" + transport.getUri() + "] Disconnect: " + reason);
202+
});
203+
transport.on("heartbeat", listeners["heartbeat"] = function(message) {
204+
console.log("[smith.io:" + transport.getUri() + "] Heartbeat");
205+
});
206+
transport.on("message", listeners["message"] = function(message) {
207+
console.log("[smith.io:" + transport.getUri() + "] Message", message);
208+
});
209+
transport.on("away", listeners["away"] = function() {
210+
console.log("[smith.io:" + transport.getUri() + "] Away");
211+
});
212+
transport.on("back", listeners["back"] = function() {
213+
console.log("[smith.io:" + transport.getUri() + "] Back");
214+
});
215+
216+
debugHandler.transports.push(transport);
217+
debugHandler.handlers.push({
218+
unhook: function() {
219+
console.log("[smith.io:" + transport.getUri() + "] Unhook debugger");
220+
for (var type in listeners) {
221+
transport.removeListener(type, listeners[type]);
222+
}
223+
}
224+
});
225+
},
226+
unhookTransport: function(transport) {
227+
var index = debugHandler.transports.indexOf(transport);
228+
if (index === -1) return;
229+
debugHandler.transports.splice(index, 1);
230+
debugHandler.handlers[index].unhook();
231+
debugHandler.handlers.splice(index, 1);
232+
}
233+
};
234+
debugHandler.start();
235+
}
236+
150237
});

test/all.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ function main(callback) {
9999
testPackage(path, function(err) {
100100
if (err) return callback(err);
101101

102-
path = PATH.join(__dirname, "../node_modules/engine.io-client");
102+
path = PATH.join(__dirname, "../node_modules/engine.io/node_modules/engine.io-client");
103103

104104
ensureDependenciesInstalled(path, "devDependencies", function(err) {
105105
if (err) return callback(err);

0 commit comments

Comments
 (0)