Skip to content

Commit bd743b0

Browse files
committed
Building subscribe
1 parent c599d91 commit bd743b0

File tree

10 files changed

+89
-38
lines changed

10 files changed

+89
-38
lines changed

src/core/constructors/node.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
dop.core.node = function() {
33
// Inherit emitter
44
dop.util.merge(this, new dop.util.emitter); //https://jsperf.com/inheritance-call-vs-object-assign
5-
this.object_owned = {};
6-
this.object_subscribed = {};
5+
this.connected = false;
76
this.request_inc = 1;
87
this.requests = {};
98
this.requests_queue = [];
10-
this.connected = false;
9+
this.object_subscribed = {};
10+
this.object_owner = {};
1111
// Generating token
1212
do { this.token = dop.util.uuid() }
1313
while (typeof dop.data.node[this.token]=='object');
Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
11

22
dop.core.registerObjectToNode = function(node, object) {
3-
var object_id = dop.getObjectId(object),
4-
object_data = dop.data.object_data[object_id];
3+
4+
var object_id = dop.getObjectId(object), object_data;
5+
6+
if (dop.data.object[object_id] === undefined)
7+
dop.data.object[object_id] = {
8+
object: object,
9+
nodes_total: 0,
10+
node: {}
11+
};
12+
13+
object_data = dop.data.object[object_id];
514

615
if (object_data.node[node.token] === undefined) {
7-
object_data.node[node.token] = true;
8-
object_data.nodes += 1;
9-
node.object_subscribed[object_id] = true;
10-
return true;
16+
object_data.nodes_total += 1;
17+
object_data.node[node.token] = {
18+
subscribed: false,
19+
owner: false
20+
};
1121
}
12-
else
13-
return false;
22+
23+
return object_data;
1424
};

src/core/protocol/registerOwner.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
dop.core.registerOwner = function(node, object, object_owner_id) {
3+
var object_data = dop.core.registerObjectToNode(node, object),
4+
object_id = dop.getObjectId(object_data.object);
5+
object_data.node[node.token].owner = true;
6+
node.object_owner[object_owner_id] = object_id;
7+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
dop.core.registerSubscriber = function(node, object) {
3+
var object_data = dop.core.registerObjectToNode(node, object),
4+
object_id = dop.getObjectId(object_data.object);
5+
node.object_subscribed[object_id] = true;
6+
if (object_data.node[node.token].subscribed)
7+
return false;
8+
else {
9+
object_data.node[node.token].subscribed = true;
10+
return true;
11+
}
12+
};
Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
11

22
dop.core.unregisterNode = function(node) {
3-
var object_id, object_data;
3+
var object_id, object_owner_id, object_data;
4+
// Removing subscribed objects
45
for (object_id in node.object_subscribed) {
5-
object_data = dop.data.object_data[object_id];
6-
// Deleting instance inside of dop.data.object_data
7-
object_data.nodes -= 1;
8-
delete object_data.node[node.token];
6+
object_data = dop.data.object[object_id];
7+
if (object_data.node[node.token] !== undefined) {
8+
object_data.nodes_total -= 1;
9+
delete object_data.node[node.token];
10+
}
911
}
10-
delete dop.data.node[ node.token ];
12+
// Removing owner objects
13+
for (object_owner_id in node.object_owner) {
14+
object_id = node.object_owner[object_owner_id];
15+
object_data = dop.data.object[object_id];
16+
if (object_data.node[node.token] !== undefined) {
17+
object_data.nodes_total -= 1;
18+
delete object_data.node[node.token];
19+
}
20+
}
21+
// Deleting object data if not more nodes are depending
22+
if (object_data.nodes_total === 0)
23+
delete dop.data.object[object_id];
24+
delete dop.data.node[node.token];
1125
};

src/dop.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ var dop = {
1010
node:{},
1111
object_inc:1,
1212
object:{},
13-
object_data:{},
1413
collectors:[[],[]],
1514
// lastGet:{}
1615
},

src/protocol/_onsubscribe.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,20 @@ dop.protocol._onsubscribe = function(node, request_id, request, response) {
88

99
else {
1010
var object_path = response[1],
11-
object_owned_id = object_path[0],
12-
object_owned = response[2],
13-
object, object_id;
14-
15-
if (node.object_owned[object_owned_id] === undefined) {
16-
object = dop.register(object_owned);
17-
object_id = dop.getObjectId(object);
18-
node.object_owned[object_owned_id] = object_id;
19-
}
20-
else {
21-
object_id = node.object_owned[object_owned_id];
22-
object = dop.getObjectRootById(object_id);
11+
object_owner_id = object_path[0],
12+
object_owner = response[2],
13+
object;
14+
15+
if (node.object_owner[object_owner_id] === undefined) {
16+
object = dop.register((dop.isObjectRegistrable(request.into)) ?
17+
dop.util.merge(request.into, object_owner)
18+
:
19+
object_owner);
20+
dop.core.registerOwner(node, object, object_owner_id);
2321
}
22+
else
23+
object = dop.data.object[node.object_owner[object_owner_id]].object;
24+
2425

2526
request.promise.resolve(dop.util.get(object, object_path.slice(1)));
2627
}

src/protocol/onsubscribe.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,17 @@ dop.protocol.onsubscribe = function(node, request_id, request) {
33

44
if (isFunction(dop.data.onsubscribe)) {
55

6-
var args = Array.prototype.slice.call(request, 1), object, response;
6+
var args = Array.prototype.slice.call(request, 1);
77

88
dop.core.localProcedureCall(dop.data.onsubscribe, args, function resolve(value) {
99
if (isObject(value)) {
10-
object = dop.register(value);
11-
var object_id = dop.getObjectId(object);
12-
response = dop.core.createResponse(request_id, 0, dop.getObjectDop(object));
13-
if (dop.core.registerObjectToNode(node, object))
14-
response.push(dop.getObjectRootById(object_id));
10+
var object = dop.register(value),
11+
object_id = dop.getObjectId(object),
12+
object_root = dop.getObjectRoot(object),
13+
response = dop.core.createResponse(request_id, 0, dop.getObjectDop(object));
14+
15+
if (dop.core.registerSubscriber(node, object_root))
16+
response.push(object_root);
1517
dop.core.sendResponse(node, response);
1618
return object;
1719
}

src/protocol/subscribe.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@ dop.protocol.subscribe = function(node, args) {
33
args = Array.prototype.slice.call(args, 0);
44
args.unshift(node, dop.protocol.instructions.subscribe);
55
var request = dop.core.createRequest.apply(node, args);
6+
request.promise.into = function(object) {
7+
if (dop.isObjectRegistrable(object))
8+
request.into = object;
9+
return request.promise;
10+
};
611
dop.core.storeRequest(node, request);
712
if (node.connected)
813
dop.core.sendRequests(node);

test/transports/subscribe.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ var client = dopClient.connect({transport:transportConnect, listener:server});
2222
return {paco:'pil'};
2323
})
2424

25-
client.subscribe('PUBLIC').then(function(obj){
26-
console.log( obj );
25+
myobj = dopClient.register({mola:'mazo'})
26+
client.subscribe('PUBLIC').into(myobj).then(function(obj){
27+
console.log( obj===myobj );
2728
})
2829

2930

0 commit comments

Comments
 (0)