Skip to content

Commit e963fee

Browse files
committed
Big refactor
1 parent 9e73f34 commit e963fee

File tree

13 files changed

+127
-198
lines changed

13 files changed

+127
-198
lines changed

src/api/getObjectPathId.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
dop.getObjectPathId = function(object) {
2+
return dop.core.getPathId(dop.getObjectPath(object))
3+
}

src/core/constructors/collector.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ dop.core.collector.prototype.add = function(mutation) {
1616
return false
1717
}
1818

19-
dop.core.collector.prototype.emit = function() {
19+
dop.core.collector.prototype.emit = function(shallWeEmitToNode) {
2020
this.destroy()
21-
return this.emitWithoutDestroy()
21+
return this.emitWithoutDestroy(shallWeEmitToNode)
2222
}
2323

24-
dop.core.collector.prototype.emitWithoutDestroy = function() {
24+
dop.core.collector.prototype.emitWithoutDestroy = function(shallWeEmitToNode) {
2525
var snapshot = new dop.core.snapshot(this.mutations)
26-
snapshot.emit()
26+
snapshot.emit(shallWeEmitToNode)
2727
this.mutations = []
2828
return snapshot
2929
}

src/core/constructors/snapshot.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,10 @@ dop.core.snapshot.prototype.redo = function() {
1717
}
1818
}
1919

20-
dop.core.snapshot.prototype.emit = function() {
21-
// This is true if we have nodes subscribed to those object/mutations
22-
// Then we have to emit to nodes
23-
if (this.mutations.length > 0 && dop.core.emitToObservers(this.mutations))
24-
dop.core.emitNodes(this.forward ? this.getPatch() : this.getUnpatch())
20+
dop.core.snapshot.prototype.emit = function(shallWeEmitToNode) {
21+
if (this.mutations.length > 0) {
22+
dop.core.emitToObservers(this, shallWeEmitToNode)
23+
}
2524
}
2625

2726
dop.core.snapshot.prototype.getPatch = function() {

src/core/objects/emitToObservers.js

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
dop.core.emitToObservers = function(mutations) {
2-
var mutation,
1+
dop.core.emitToObservers = function(snapshot, shallWeEmitToNode) {
2+
var mutations = snapshot.mutations,
3+
mutation,
34
path_id,
45
observer_id,
56
mutations_by_observers = {},
@@ -16,12 +17,6 @@ dop.core.emitToObservers = function(mutations) {
1617
path_id = mutation.path_id
1718
path = mutation.path
1819

19-
// if (
20-
// !mutations_with_subscribers &&
21-
// isObject(dop.data.object[dop.getObjectId(mutation.object)])
22-
// )
23-
// mutations_with_subscribers = true
24-
2520
// .observers_object
2621
if (
2722
data_path[path_id] !== undefined &&
@@ -78,7 +73,10 @@ dop.core.emitToObservers = function(mutations) {
7873
var observer = dop.data.observers[observer_id]
7974
if (observer !== undefined)
8075
// We need to make sure that the observer still exists, because maybe has been removed after calling previous observers
81-
observer.callback(mutations_by_observers[observer_id])
76+
observer.callback(
77+
mutations_by_observers[observer_id],
78+
shallWeEmitToNode
79+
)
8280
}
8381

8482
return mutations_with_subscribers

src/core/protocol/emitNodes.js

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

src/core/protocol/emitToNode.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
dop.core.emitToNode = function(node, object_path_id, patch) {
2+
var object_id, chunks
3+
for (object_id in patch) {
4+
chunks = patch[object_id].chunks
5+
dop.protocol.patch(
6+
node,
7+
object_id,
8+
chunks.length > 1 ? chunks : chunks[0]
9+
)
10+
}
11+
}

src/core/protocol/registerObjectToNode.js

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

src/core/protocol/registerOwner.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
11
dop.core.registerOwner = function(node, object, object_owner_id) {
2-
var object_data = dop.core.registerObjectToNode(node, object),
3-
object_id = dop.getObjectId(object_data.object)
4-
object_data.node[node.token].owner = object_owner_id
5-
node.owner[object_owner_id] = object_id
2+
node.owner[object_owner_id] = object
63
}
Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
1-
dop.core.registerSubscriber = function(node, object) {
2-
var object_data = dop.core.registerObjectToNode(node, object),
3-
object_id = dop.getObjectId(object_data.object)
4-
node.subscriber[object_id] = true
5-
if (object_data.node[node.token].subscriber) return false
6-
else {
7-
object_data.node[node.token].subscriber = 1
8-
return true
1+
dop.core.registerSubscriber = function(node, object, object_path_id) {
2+
var observer = dop.createObserver(function(mutations, shallWeEmitToNode) {
3+
var patch = dop.core.getPatch(mutations)
4+
dop.core.emitToNode(node, object_path_id, patch)
5+
})
6+
observer.observeAll(object)
7+
node.subscriber[object_path_id] = {
8+
observer: observer,
9+
object: object
910
}
1011
}
12+
13+
// object_data.node[node.token] = {
14+
// version: 0, // incremental integer for new patches
15+
// pending: [],
16+
// applied_version: 0, // last patch version applied correctly
17+
// applied: {}
18+
// }
Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,3 @@
11
dop.core.unregisterNode = function(node) {
2-
var object_id, object_owner_id, object_data
3-
4-
for (object_id in node.subscriber) {
5-
object_data = dop.data.object[object_id]
6-
if (object_data !== undefined) {
7-
// Removing subscriber objects
8-
if (object_data.node[node.token] !== undefined) {
9-
object_data.nodes_total -= 1
10-
delete object_data.node[node.token]
11-
}
12-
13-
// Simply remove all associated objects for which this node has subscription
14-
// only if object node_total ==0; Added by Satyam Singh.
15-
if (object_data.nodes_total === 0) {
16-
delete dop.data.object[object_id]
17-
}
18-
}
19-
}
20-
21-
// Removing owner objects
22-
for (object_owner_id in node.owner) {
23-
object_id = node.owner[object_owner_id]
24-
object_data = dop.data.object[object_id]
25-
if (
26-
object_data !== undefined &&
27-
object_data.node[node.token] !== undefined
28-
) {
29-
object_data.nodes_total -= 1
30-
delete object_data.node[node.token]
31-
}
32-
}
33-
34-
// Deleting node
352
delete dop.data.node[node.token]
363
}

0 commit comments

Comments
 (0)