@@ -6,6 +6,8 @@ define(function(require, exports, module) {
6
6
var SMITH = require ( "smith" ) ;
7
7
var EVENTS = require ( "smith/events-amd" ) ;
8
8
9
+ var transports = [ ] ;
10
+ var debugHandler = null ;
9
11
10
12
function inherits ( Child , Parent ) {
11
13
Child . prototype = Object . create ( Parent . prototype , { constructor : { value : Child } } ) ;
@@ -28,7 +30,15 @@ define(function(require, exports, module) {
28
30
}
29
31
30
32
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
+
32
42
Transport . prototype . connect = function ( options , callback ) {
33
43
var _self = this ;
34
44
@@ -46,6 +56,10 @@ define(function(require, exports, module) {
46
56
}
47
57
} ) ;
48
58
59
+ _self . socket . on ( "heartbeat" , function ( ) {
60
+ _self . emit ( "heartbeat" ) ;
61
+ } ) ;
62
+
49
63
_self . socket . on ( "open" , function ( ) {
50
64
51
65
connecting = false ;
@@ -108,6 +122,9 @@ define(function(require, exports, module) {
108
122
}
109
123
110
124
setTimeout ( function ( ) {
125
+
126
+ _self . emit ( "reconnect" , options . reconnectAttempt ) ;
127
+
111
128
_self . connect ( {
112
129
reconnectAttempt : options . reconnectAttempt ,
113
130
fireConnect : ( options . reconnectAttempt >= 6 ) ? true : false
@@ -143,8 +160,78 @@ define(function(require, exports, module) {
143
160
144
161
exports . connect = function ( options , callback ) {
145
162
var transport = new Transport ( options , callback ) ;
163
+ transports . push ( transport ) ;
164
+ if ( debugHandler ) {
165
+ debugHandler . hookTransport ( transport ) ;
166
+ }
146
167
transport . connect ( { } , callback ) ;
147
168
return transport ;
148
169
}
149
170
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
+
150
237
} ) ;
0 commit comments