Skip to content

Commit f5dcd82

Browse files
committed
Big refactor removing dop.data.object
1 parent e963fee commit f5dcd82

File tree

7 files changed

+42
-47
lines changed

7 files changed

+42
-47
lines changed

src/core/protocol/emitToNode.js

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/core/protocol/registerOwner.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
dop.core.registerOwner = function(node, object, object_owner_id) {
2-
node.owner[object_owner_id] = object
2+
node.owner[object_owner_id] = {
3+
object: object,
4+
applied_version: 0, // last patch version applied correctly
5+
applied: {}
6+
}
37
}

src/core/protocol/registerSubscriber.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
11
dop.core.registerSubscriber = function(node, object, object_path_id) {
22
var observer = dop.createObserver(function(mutations, shallWeEmitToNode) {
3-
var patch = dop.core.getPatch(mutations)
4-
dop.core.emitToNode(node, object_path_id, patch)
3+
var object_id,
4+
chunks,
5+
patch = dop.core.getPatch(mutations)
6+
for (object_id in patch) {
7+
chunks = patch[object_id].chunks
8+
dop.protocol.patch(node, object_path_id, chunks, subscriber)
9+
}
510
})
6-
observer.observeAll(object)
7-
node.subscriber[object_path_id] = {
11+
var subscriber = {
812
observer: observer,
9-
object: object
13+
object: object,
14+
version: 0, // incremental integer for new patches
15+
pending: []
1016
}
17+
observer.observeAll(object)
18+
node.subscriber[object_path_id] = subscriber
1119
}
1220

1321
// object_data.node[node.token] = {
14-
// version: 0, // incremental integer for new patches
22+
// version: 0,
1523
// pending: [],
1624
// applied_version: 0, // last patch version applied correctly
1725
// applied: {}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
dop.core.unregisterNode = function(node) {
22
delete dop.data.node[node.token]
3+
for (var object_path_id in node.subscriber)
4+
node.subscriber[object_path_id].observer.destroy()
35
}

src/protocol/_onpatch.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
dop.protocol._onpatch = function(node, request_id, request, response) {
22
var rejection = response[0],
3-
object_id = request[2],
4-
object_node = dop.data.object[object_id].node[node.token],
3+
object_id_owner = request[2],
4+
subscriber = node.subscriber[object_id_owner],
55
version = request[3],
6-
pending_list = object_node.pending,
6+
pending_list = subscriber.pending,
77
promise = request.promise,
88
index = 0,
99
total = pending_list.length,
@@ -22,7 +22,7 @@ dop.protocol._onpatch = function(node, request_id, request, response) {
2222
else
2323
dop.protocol.patchSend(
2424
node,
25-
object_id,
25+
object_id_owner,
2626
version_item,
2727
pending_list[index][1]
2828
)

src/protocol/onpatch.js

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,29 @@
11
dop.protocol.onpatch = function(node, request_id, request) {
22
var object_id_owner = request[1],
3-
object_id = node.owner[object_id_owner],
43
version = request[2],
54
patch = request[3],
5+
owner = node.owner[object_id_owner],
66
response = dop.core.createResponse(request_id),
7-
object_data = dop.data.object[object_id],
8-
object_node,
97
collector
108

11-
if (
12-
isObject(object_data) &&
13-
isObject(object_data.node[node.token]) &&
14-
object_data.node[node.token].owner === object_id_owner
15-
) {
16-
object_node = object_data.node[node.token]
9+
if (owner !== undefined) {
1710
// Storing patch
1811
if (
19-
object_node.applied_version < version &&
20-
object_node.applied[version] === undefined
12+
owner.applied_version < version &&
13+
owner.applied[version] === undefined
2114
) {
2215
// Storing patch
23-
object_node.applied[version] = patch
16+
owner.applied[version] = patch
2417
// Applying
2518
collector = dop.collect()
26-
while (object_node.applied[object_node.applied_version + 1]) {
27-
object_node.applied_version += 1
19+
while (owner.applied[owner.applied_version + 1]) {
20+
owner.applied_version += 1
2821
dop.core.setPatch(
29-
object_data.object,
30-
object_node.applied[object_node.applied_version],
22+
owner.object,
23+
owner.applied[owner.applied_version],
3124
dop.core.setPatchFunctionMutator
3225
)
33-
delete object_node.applied[object_node.applied_version]
26+
delete owner.applied[owner.applied_version]
3427
}
3528
collector.emit()
3629
}

src/protocol/patch.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
dop.protocol.patch = function(node, object_id, patch) {
2-
var object_node = dop.data.object[object_id].node[node.token],
3-
version = ++object_node.version
4-
object_node.pending.push([version, dop.util.merge({}, patch)]) // Making a copy because this object is exposed to the api users and can be mutated
5-
return dop.protocol.patchSend(node, object_id, version, patch)
1+
dop.protocol.patch = function(node, object_path_id, chunks, subscriber) {
2+
var version = ++subscriber.version
3+
subscriber.pending.push([version, chunks])
4+
return dop.protocol.patchSend(node, object_path_id, version, chunks)
65
}
76

87
// Also used by dop.protocol._onpatch
9-
dop.protocol.patchSend = function(node, object_id, version, patch) {
8+
dop.protocol.patchSend = function(node, object_path_id, version, chunks) {
109
var request = dop.core.createRequest(
1110
node,
1211
dop.protocol.instructions.patch,
13-
object_id,
12+
object_path_id,
1413
version,
15-
patch
14+
chunks
1615
)
1716
dop.core.storeAndSendRequests(node, request, dop.encodeFunction)
1817
return request.promise

0 commit comments

Comments
 (0)