2
2
3
3
const EventEmitter = require ( 'events' ) ;
4
4
const crypto = require ( 'crypto' ) ;
5
- const Ultron = require ( 'ultron' ) ;
6
5
const https = require ( 'https' ) ;
7
6
const http = require ( 'http' ) ;
8
7
const url = require ( 'url' ) ;
@@ -50,7 +49,6 @@ class WebSocket extends EventEmitter {
50
49
this . _receiver = null ;
51
50
this . _sender = null ;
52
51
this . _socket = null ;
53
- this . _ultron = null ;
54
52
55
53
if ( address !== null ) {
56
54
if ( ! protocols ) {
@@ -123,18 +121,17 @@ class WebSocket extends EventEmitter {
123
121
socket . setTimeout ( 0 ) ;
124
122
socket . setNoDelay ( ) ;
125
123
124
+ socket . on ( 'close' , this . _finalize ) ;
125
+ socket . on ( 'error' , this . _finalize ) ;
126
+ socket . on ( 'end' , this . _finalize ) ;
127
+
126
128
this . _receiver = new Receiver ( this . _extensions , maxPayload , this . binaryType ) ;
127
129
this . _sender = new Sender ( socket , this . _extensions ) ;
128
- this . _ultron = new Ultron ( socket ) ;
129
130
this . _socket = socket ;
130
131
131
- this . _ultron . on ( 'close' , this . _finalize ) ;
132
- this . _ultron . on ( 'error' , this . _finalize ) ;
133
- this . _ultron . on ( 'end' , this . _finalize ) ;
134
-
135
132
if ( head . length > 0 ) socket . unshift ( head ) ;
136
133
137
- this . _ultron . on ( 'data' , ( data ) => this . _receiver . add ( data ) ) ;
134
+ socket . on ( 'data' , this . _receiver . add ) ;
138
135
139
136
this . _receiver . onmessage = ( data ) => this . emit ( 'message' , data ) ;
140
137
this . _receiver . onping = ( data ) => {
@@ -143,6 +140,11 @@ class WebSocket extends EventEmitter {
143
140
} ;
144
141
this . _receiver . onpong = ( data ) => this . emit ( 'pong' , data ) ;
145
142
this . _receiver . onclose = ( code , reason ) => {
143
+ //
144
+ // Discard any additional data that is received on the socket.
145
+ //
146
+ this . _socket . removeListener ( 'data' , this . _receiver . add ) ;
147
+
146
148
this . _closeFrameReceived = true ;
147
149
this . _closeMessage = reason ;
148
150
this . _closeCode = code ;
@@ -182,41 +184,32 @@ class WebSocket extends EventEmitter {
182
184
this . _finalized = true ;
183
185
184
186
if ( typeof error === 'object' ) this . emit ( 'error' , error ) ;
185
- if ( ! this . _socket ) return this . emitClose ( ) ;
187
+ if ( ! this . _socket ) {
188
+ this . readyState = WebSocket . CLOSED ;
189
+ this . emit ( 'close' , this . _closeCode , this . _closeMessage ) ;
190
+ return ;
191
+ }
186
192
187
193
clearTimeout ( this . _closeTimer ) ;
188
- this . _closeTimer = null ;
189
-
190
- this . _ultron . destroy ( ) ;
191
- this . _ultron = null ;
192
194
195
+ this . _socket . removeListener ( 'data' , this . _receiver . add ) ;
196
+ this . _socket . removeListener ( 'close' , this . _finalize ) ;
197
+ this . _socket . removeListener ( 'error' , this . _finalize ) ;
198
+ this . _socket . removeListener ( 'end' , this . _finalize ) ;
193
199
this . _socket . on ( 'error' , constants . NOOP ) ;
194
200
195
201
if ( ! error ) this . _socket . end ( ) ;
196
202
else this . _socket . destroy ( ) ;
197
203
198
- this . _socket = null ;
199
- this . _sender = null ;
204
+ this . _receiver . cleanup ( ( ) => {
205
+ this . readyState = WebSocket . CLOSED ;
200
206
201
- this . _receiver . cleanup ( ( ) => this . emitClose ( ) ) ;
202
- this . _receiver = null ;
203
- }
204
-
205
- /**
206
- * Emit the `close` event.
207
- *
208
- * @private
209
- */
210
- emitClose ( ) {
211
- this . readyState = WebSocket . CLOSED ;
212
-
213
- this . emit ( 'close' , this . _closeCode , this . _closeMessage ) ;
214
-
215
- if ( this . _extensions [ PerMessageDeflate . extensionName ] ) {
216
- this . _extensions [ PerMessageDeflate . extensionName ] . cleanup ( ) ;
217
- }
207
+ if ( this . _extensions [ PerMessageDeflate . extensionName ] ) {
208
+ this . _extensions [ PerMessageDeflate . extensionName ] . cleanup ( ) ;
209
+ }
218
210
219
- this . removeAllListeners ( ) ;
211
+ this . emit ( 'close' , this . _closeCode , this . _closeMessage ) ;
212
+ } ) ;
220
213
}
221
214
222
215
/**
0 commit comments