Skip to content

Commit 52c2e9d

Browse files
committed
Message queue for websocket transport implemented
1 parent 875e133 commit 52c2e9d

File tree

8 files changed

+54
-49
lines changed

8 files changed

+54
-49
lines changed

dist/browser.js

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,12 @@ var dop = {
3030
transports: {listen:{}, connect:{}},
3131

3232
CONS: {
33-
CLOSE: 0,
34-
OPEN: 1,
35-
CONNECT: 2,
36-
RECONNECT: 3,
37-
SEND: 4
33+
CLOSE: '~CLOSE',
34+
OPEN: '~OPEN',
35+
CONNECTING: '~CONNECTING',
36+
CONNECT: '~CONNECT',
37+
RECONNECT: '~RECONNECT',
38+
SEND: '~SEND'
3839
}
3940

4041
};
@@ -182,15 +183,15 @@ function websocket(dop, node, options) {
182183
:
183184
send_queue.push(message);
184185
}
185-
function sendQueue(message) {
186+
function sendQueue() {
186187
while (send_queue.length>0)
187188
socket.send(send_queue.shift());
188189
}
189190

190191
// Socket events
191192
function onopen() {
192193
// Reconnect
193-
if (node.readyState === dop.CONS.RECONNECT)
194+
if (node.readyState === dop.CONS.CONNECTING)
194195
socket.send(node.tokenServer);
195196
// Connect
196197
else {
@@ -200,39 +201,46 @@ function websocket(dop, node, options) {
200201
dop.core.emitOpen(node, socket, options.transport);
201202
}
202203
function onmessage(message) {
204+
// console.log( 'C<<: `'+message.data+'`' );
203205
// Reconnecting
204-
if (node.readyState===dop.CONS.RECONNECT && message.data===node.tokenServer) {
206+
if (node.readyState===dop.CONS.CONNECTING && message.data===node.tokenServer) {
205207
node.readyState = dop.CONS.CONNECT;
206208
dop.core.setSocketToNode(node, socket);
207209
dop.core.emitReconnect(node, oldSocket);
210+
sendQueue();
208211
}
209212
else
210213
dop.core.emitMessage(node, message.data, message);
211214
}
212215
function onclose() {
216+
node.readyState = dop.CONS.CLOSE;
213217
dop.core.emitClose(node, socket);
214218
}
215219

216220
// dop events
217-
function onconnect() {
218-
if (node.readyState === dop.CONS.RECONNECT) {
221+
function onconnect(message_response) {
222+
if (node.readyState === dop.CONS.CONNECTING) {
219223
dop.core.emitDisconnect(node);
220224
dop.core.setSocketToNode(node, socket);
221225
}
226+
socket.send(message_response);
222227
node.readyState = dop.CONS.CONNECT;
223228
dop.core.emitConnect(node);
229+
sendQueue();
224230
}
225231
function ondisconnect() {
226232
node.readyState = dop.CONS.CLOSE;
227233
socket.close();
228234
}
229235

230236
function reconnect() {
231-
oldSocket = socket;
232-
socket = new api(url);
233-
node.readyState = dop.CONS.RECONNECT;
234-
addListeners(socket, onopen, onmessage, onclose);
235-
removeListeners(oldSocket, onopen, onmessage, onclose);
237+
if (node.readyState !== dop.CONS.CONNECT) {
238+
oldSocket = socket;
239+
socket = new api(url);
240+
node.readyState = dop.CONS.CONNECTING;
241+
addListeners(socket, onopen, onmessage, onclose);
242+
removeListeners(oldSocket, onopen, onmessage, onclose);
243+
}
236244
}
237245

238246
// Setting up
@@ -2605,8 +2613,7 @@ dop.protocol.onconnect = function(node, request_id, request) {
26052613
var tokenServer=request[1],
26062614
response = dop.core.createResponse(request_id, 0);
26072615
node.tokenServer = tokenServer;
2608-
node.emit(dop.CONS.CONNECT);
2609-
node.send(JSON.stringify(response));
2616+
node.emit(dop.CONS.CONNECT, JSON.stringify(response));
26102617
};
26112618

26122619

dist/browser.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/nodejs.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,12 @@ var dop = {
3030
transports: {listen:{}, connect:{}},
3131

3232
CONS: {
33-
CLOSE: 0,
34-
OPEN: 1,
35-
CONNECT: 2,
36-
RECONNECT: 3,
37-
SEND: 4
33+
CLOSE: '~CLOSE',
34+
OPEN: '~OPEN',
35+
CONNECTING: '~CONNECTING',
36+
CONNECT: '~CONNECT',
37+
RECONNECT: '~RECONNECT',
38+
SEND: '~SEND'
3839
}
3940

4041
};
@@ -2426,8 +2427,7 @@ dop.protocol.onconnect = function(node, request_id, request) {
24262427
var tokenServer=request[1],
24272428
response = dop.core.createResponse(request_id, 0);
24282429
node.tokenServer = tokenServer;
2429-
node.emit(dop.CONS.CONNECT);
2430-
node.send(JSON.stringify(response));
2430+
node.emit(dop.CONS.CONNECT, JSON.stringify(response));
24312431
};
24322432

24332433

src/dop.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ var dop = {
2222
transports: {listen:{}, connect:{}},
2323

2424
CONS: {
25-
CLOSE: 0,
26-
OPEN: 1,
27-
CONNECT: 2,
28-
RECONNECT: 3,
29-
SEND: 4
25+
CLOSE: '~CLOSE',
26+
OPEN: '~OPEN',
27+
CONNECTING: '~CONNECTING',
28+
CONNECT: '~CONNECT',
29+
RECONNECT: '~RECONNECT',
30+
SEND: '~SEND'
3031
}
3132

3233
};

src/env/browser/websocket.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ function websocket(dop, node, options) {
4141
dop.core.emitOpen(node, socket, options.transport);
4242
}
4343
function onmessage(message) {
44+
// console.log( 'C<<: `'+message.data+'`' );
4445
// Reconnecting
4546
if (node.readyState===dop.CONS.CONNECTING && message.data===node.tokenServer) {
4647
node.readyState = dop.CONS.CONNECT;
@@ -62,8 +63,7 @@ function websocket(dop, node, options) {
6263
dop.core.emitDisconnect(node);
6364
dop.core.setSocketToNode(node, socket);
6465
}
65-
else
66-
socket.send(message_response);
66+
socket.send(message_response);
6767
node.readyState = dop.CONS.CONNECT;
6868
dop.core.emitConnect(node);
6969
sendQueue();

test/protocol/protocol_queue.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ function send() {
2929
if (nodeServer)
3030
nodeServer.send(String(msg));
3131
if (msg++ < 25)
32-
setTimeout(send, 100);
32+
setTimeout(send, 200);
3333
}
3434
send();
3535

@@ -43,7 +43,7 @@ test('CONNECT TEST', function(t) {
4343
nodeServer = node;
4444
});
4545
server.on('message', function(node, message){
46-
// console.log( '❌ message `'+message+'`', node.token );
46+
console.log( '❌ message `'+message+'`', node.token );
4747
});
4848

4949
nodeClient.on('message', function(message){
@@ -63,4 +63,5 @@ setTimeout(function(){
6363
console.log( 'reconnecting...' );
6464
nodeClient.reconnect();
6565
},500);
66-
}, 1000)
66+
}, 1000);
67+

test/protocol/protocol_reconnectfail.js

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,19 @@ test('RECONNECT TEST', function(t) {
3636
else
3737
t.notEqual(node.socket, socketServer, '❌ connect 2');
3838
});
39-
// server.on('close', function(socket){
40-
// t.equal(socket, socketServer, '❌ close');
41-
// });
42-
server.on('reconnect', function(node, oldSocket){
43-
t.equal(node===nodeServer && oldSocket===socketServer, true, '❌ reconnect');
44-
});
4539
server.on('disconnect', function(node){
4640
t.equal(node, nodeServer, '❌ disconnect');
4741
});
42+
server.on('reconnect', function(node, oldSocket){
43+
t.equal(false, true, '❌ reconnect'); // this should not happen
44+
});
45+
46+
4847

4948

5049
nodeClient.on('open', function(socket) {
5150
if (socketClient === undefined)
5251
socketClient = socket;
53-
// t.equal(dopClient.getNodeBySocket(socket).socket, socket, '✅ open');
5452
});
5553
nodeClient.on('connect', function() {
5654
if (tokenClient === undefined) {
@@ -63,15 +61,13 @@ test('RECONNECT TEST', function(t) {
6361
// server.listener.close();
6462
}
6563
});
66-
// nodeClient.on('close', function(socket){
67-
// t.equal(socket, socketClient, '✅ close');
68-
// });
69-
nodeClient.on('reconnect', function(oldSocket) {
70-
t.equal(oldSocket, socketClient, '✅ reconnect');
71-
});
7264
nodeClient.on('disconnect', function() {
7365
t.equal(nodeClient.socket, socketClient, '✅ disconnect');
7466
});
67+
nodeClient.on('reconnect', function(oldSocket) {
68+
t.equal(true, false, '✅ reconnect'); // this should not happen
69+
});
70+
7571
});
7672

7773

@@ -83,6 +79,6 @@ setTimeout(function(){
8379
}, 500)
8480
// Reconnecting
8581
setTimeout(function(){
86-
console.log( 'reconnecting...' );
82+
console.log( 'late reconnecting...' );
8783
nodeClient.reconnect();
8884
}, 3000);

0 commit comments

Comments
 (0)