Skip to content

Commit bb6968f

Browse files
committed
Implemented transports for socketio & websockets on nodejs & browser
1 parent 564031d commit bb6968f

File tree

7 files changed

+91
-37
lines changed

7 files changed

+91
-37
lines changed

dist/browser.js

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
(function factory(root) {
44

55
var dop = {
6-
version: '0.1.0',
6+
version: '0.3.0',
77
name: 'dop', // Useful for transport (websockets namespaces)
88
create: factory,
99

@@ -47,7 +47,7 @@ dop.connect = function(options) {
4747
options = args[0] = {};
4848

4949
if (typeof options.transport != 'function')
50-
options.transport = dopTransportConnectWebSocket;
50+
options.transport = connectWebsocket;
5151

5252
return dop.core.connector(args);
5353
};
@@ -144,22 +144,33 @@ emitter.emit(name, 4);
144144

145145
////////// src/env/browser/websocket.js
146146

147-
var dopTransportConnectWebSocket = function(dop, node, options) {
147+
var connectWebsocket = function(dop, node, options) {
148148

149149
var url = 'ws://localhost:4444/';
150150

151151
if (typeof options.url == 'string')
152-
url = options.url;
153-
else if (/http/.test(window.location.href)) {
154-
var domain_prefix = /(ss|ps)?:\/\/([^\/]+)\/?(.+)?/.exec(window.location.href);
155-
var protocol = domain_prefix[1] ? 'wss' : 'ws';
152+
url = options.url.replace('http','ws');
153+
else if (typeof window!='undefined' && /http/.test(window.location.href)) {
154+
var domain_prefix = /(ss|ps)?:\/\/([^\/]+)\/?(.+)?/.exec(window.location.href),
155+
protocol = domain_prefix[1] ? 'wss' : 'ws';
156156
url = protocol+'://'+domain_prefix[2].toLocaleLowerCase()+'/';
157157
}
158158

159-
var socket = new options.transport.api(url);
159+
var socket = new options.transport.api(url),
160+
send = socket.send,
161+
send_queue = [];
162+
163+
socket.send = function(message) {
164+
(socket.readyState !== 1) ?
165+
send_queue.push(message)
166+
:
167+
send.call(socket, message);
168+
};
160169

161170
socket.addEventListener('open', function() {
162171
dop.core.onopen(node, socket);
172+
while (send_queue.length>0)
173+
send.call(socket, send_queue.shift());
163174
});
164175

165176
socket.addEventListener('message', function(message) {
@@ -177,12 +188,29 @@ var dopTransportConnectWebSocket = function(dop, node, options) {
177188
return socket;
178189
};
179190

180-
dopTransportConnectWebSocket.api = window.WebSocket;
191+
// //nodejs
192+
// window=undefined
193+
// module.exports = true
194+
// dop=undefined
195+
196+
// //es6
197+
// window={}
198+
// module.exports = {}
199+
// dop=undefined
181200

182-
if (typeof dop == 'undefined' && typeof module == 'object' && module.exports)
183-
module.exports = dopTransportConnectWebSocket;
201+
// //cdn
202+
// window={}
203+
// module.exports = undefined
204+
// dop={}
184205

185206

207+
if (typeof dop=='undefined' && typeof module == 'object' && module.exports) {
208+
connectWebsocket.api = require('ws');
209+
module.exports = connectWebsocket;
210+
}
211+
else if (typeof window != 'undefined')
212+
connectWebsocket.api = window.WebSocket;
213+
186214

187215

188216

@@ -1039,13 +1067,11 @@ Object.assign(dop.core.listener.prototype, dop.util.emitter.prototype);
10391067
dop.core.node = function() {
10401068
// Inherit emitter
10411069
dop.util.emitter.call(this); //https://jsperf.com/inheritance-call-vs-object-assign
1042-
this.status = 0;
10431070
this.object_owned = {};
10441071
this.object_subscribed = {};
10451072
this.request_inc = 1;
10461073
this.requests = {};
10471074
this.requests_queue = [];
1048-
this.sends_queue = [];
10491075
};
10501076
// Inherit emitter
10511077
Object.assign(dop.core.node.prototype, dop.util.emitter.prototype);
@@ -2237,7 +2263,7 @@ dop.core.onopen = function(listener_or_node, socket, transport) {
22372263

22382264
listener_or_node.emit('open', socket);
22392265

2240-
// if side is listener we send token
2266+
// if listener_or_node is listener we send token
22412267
if (listener_or_node.socket !== socket) {
22422268
var node = new dop.core.node();
22432269
node.transport = transport;
@@ -2246,7 +2272,6 @@ dop.core.onopen = function(listener_or_node, socket, transport) {
22462272
node.listener = listener_or_node;
22472273
dop.protocol.connect(node);
22482274
}
2249-
22502275
};
22512276

22522277

@@ -2258,7 +2283,6 @@ dop.core.onopen = function(listener_or_node, socket, transport) {
22582283
////////// src/core/protocol/registerNode.js
22592284

22602285
dop.core.registerNode = function(node, token) {
2261-
node.status = 1;
22622286
node.token = token;
22632287
node.socket[CONS.socket_token] = token;
22642288
dop.data.node[token] = node;
@@ -2343,7 +2367,6 @@ dop.protocol._onconnect = function(node, request_id, request, response) {
23432367

23442368
// Node is connected correctly
23452369
if (response[0]===0) {
2346-
node.status = 1;
23472370
node.listener.emit('connect', node, token);
23482371
node.emit('connect', token);
23492372
}
@@ -2448,11 +2471,11 @@ dop.protocol.instructions = {
24482471

24492472

24502473
// Server -> Client
2451-
connect: 0, // [ 1234, 0, <user_token>]
2474+
connect: 0, // [ 1234, 0, <user_token>, <options>]
24522475
// [-1234, 0]
24532476

24542477
// Client -> Server
2455-
reconnect: 1, // [ 1234, 1, <new_user_token>, <old_user_token>]
2478+
reconnect: 1, // [ 1234, 1, <new_user_token>, <old_user_token>, <options>]
24562479
// [-1234, 0]
24572480

24582481
// Subscriptor -> Owner

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: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
(function factory(root) {
44

55
var dop = {
6-
version: '0.1.0',
6+
version: '0.3.0',
77
name: 'dop', // Useful for transport (websockets namespaces)
88
create: factory,
99

@@ -37,6 +37,24 @@ var CONS = {
3737

3838

3939

40+
////////// src/env/nodejs/connect.js
41+
42+
dop.connect = function(options) {
43+
44+
var args = Array.prototype.slice.call(arguments, 0);
45+
46+
if (dop.util.typeof(args[0]) != 'object')
47+
options = args[0] = {};
48+
49+
if (typeof options.transport != 'function')
50+
options.transport = require('dop-transports').connect.websocket;
51+
52+
return dop.core.connector(args);
53+
};
54+
55+
56+
57+
4058
////////// src/env/nodejs/emitter.js
4159
dop.util.emitter = require('events').EventEmitter;
4260

@@ -917,13 +935,11 @@ Object.assign(dop.core.listener.prototype, dop.util.emitter.prototype);
917935
dop.core.node = function() {
918936
// Inherit emitter
919937
dop.util.emitter.call(this); //https://jsperf.com/inheritance-call-vs-object-assign
920-
this.status = 0;
921938
this.object_owned = {};
922939
this.object_subscribed = {};
923940
this.request_inc = 1;
924941
this.requests = {};
925942
this.requests_queue = [];
926-
this.sends_queue = [];
927943
};
928944
// Inherit emitter
929945
Object.assign(dop.core.node.prototype, dop.util.emitter.prototype);
@@ -2115,7 +2131,7 @@ dop.core.onopen = function(listener_or_node, socket, transport) {
21152131

21162132
listener_or_node.emit('open', socket);
21172133

2118-
// if side is listener we send token
2134+
// if listener_or_node is listener we send token
21192135
if (listener_or_node.socket !== socket) {
21202136
var node = new dop.core.node();
21212137
node.transport = transport;
@@ -2124,7 +2140,6 @@ dop.core.onopen = function(listener_or_node, socket, transport) {
21242140
node.listener = listener_or_node;
21252141
dop.protocol.connect(node);
21262142
}
2127-
21282143
};
21292144

21302145

@@ -2136,7 +2151,6 @@ dop.core.onopen = function(listener_or_node, socket, transport) {
21362151
////////// src/core/protocol/registerNode.js
21372152

21382153
dop.core.registerNode = function(node, token) {
2139-
node.status = 1;
21402154
node.token = token;
21412155
node.socket[CONS.socket_token] = token;
21422156
dop.data.node[token] = node;
@@ -2221,7 +2235,6 @@ dop.protocol._onconnect = function(node, request_id, request, response) {
22212235

22222236
// Node is connected correctly
22232237
if (response[0]===0) {
2224-
node.status = 1;
22252238
node.listener.emit('connect', node, token);
22262239
node.emit('connect', token);
22272240
}
@@ -2326,11 +2339,11 @@ dop.protocol.instructions = {
23262339

23272340

23282341
// Server -> Client
2329-
connect: 0, // [ 1234, 0, <user_token>]
2342+
connect: 0, // [ 1234, 0, <user_token>, <options>]
23302343
// [-1234, 0]
23312344

23322345
// Client -> Server
2333-
reconnect: 1, // [ 1234, 1, <new_user_token>, <old_user_token>]
2346+
reconnect: 1, // [ 1234, 1, <new_user_token>, <old_user_token>, <options>]
23342347
// [-1234, 0]
23352348

23362349
// Subscriptor -> Owner

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "dop",
3-
"version": "0.2.1",
3+
"version": "0.3.0",
44
"main": "./dist/nodejs.js",
55
"browser": "./dist/browser.js",
66
"license": "MIT",

src/dop.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
(function factory(root) {
22

33
var dop = {
4-
version: '0.2.1',
4+
version: '0.3.0',
55
name: 'dop', // Useful for transport (websockets namespaces)
66
create: factory,
77

src/env/browser/connect.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ dop.connect = function(options) {
77
options = args[0] = {};
88

99
if (typeof options.transport != 'function')
10-
options.transport = dopTransportConnectWebSocket;
10+
options.transport = connectWebsocket;
1111

1212
return dop.core.connector(args);
1313
};

src/env/browser/websocket.js

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11

2-
var dopTransportConnectWebSocket = function(dop, node, options) {
2+
var connectWebsocket = function(dop, node, options) {
33

44
var url = 'ws://localhost:4444/';
55

66
if (typeof options.url == 'string')
77
url = options.url.replace('http','ws');
8-
else if (/http/.test(window.location.href)) {
8+
else if (typeof window!='undefined' && /http/.test(window.location.href)) {
99
var domain_prefix = /(ss|ps)?:\/\/([^\/]+)\/?(.+)?/.exec(window.location.href),
1010
protocol = domain_prefix[1] ? 'wss' : 'ws';
1111
url = protocol+'://'+domain_prefix[2].toLocaleLowerCase()+'/';
@@ -43,7 +43,25 @@ var dopTransportConnectWebSocket = function(dop, node, options) {
4343
return socket;
4444
};
4545

46-
dopTransportConnectWebSocket.api = window.WebSocket;
46+
// //nodejs
47+
// window=undefined
48+
// module.exports = true
49+
// dop=undefined
4750

48-
if (typeof dop == 'undefined' && typeof module == 'object' && module.exports)
49-
module.exports = dopTransportConnectWebSocket;
51+
// //es6
52+
// window={}
53+
// module.exports = {}
54+
// dop=undefined
55+
56+
// //cdn
57+
// window={}
58+
// module.exports = undefined
59+
// dop={}
60+
61+
62+
if (typeof dop=='undefined' && typeof module == 'object' && module.exports) {
63+
connectWebsocket.api = require('ws');
64+
module.exports = connectWebsocket;
65+
}
66+
else if (typeof window != 'undefined')
67+
connectWebsocket.api = window.WebSocket;

0 commit comments

Comments
 (0)