Skip to content

Commit e77ec7f

Browse files
committed
FIxing issues
1 parent f5dcd82 commit e77ec7f

File tree

8 files changed

+142
-99
lines changed

8 files changed

+142
-99
lines changed

src/api/decode.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
dop.decode = function(data, node) {
1+
dop.decode = function(data) {
22
var undefineds = [],
33
index = 0,
44
total,
55
output = JSON.parse(data, function(property, value) {
6-
return dop.core.decode.call(this, property, value, node, undefineds)
6+
return dop.core.decode.call(this, property, value, undefineds)
77
})
88

99
for (total = undefineds.length, index = 0; index < total; ++index)

src/core/objects/configureObject.js

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@ dop.core.configureObject = function(object, property_parent, parent) {
88
parent
99
)
1010

11-
// // Removing fake dop property
12-
// delete object[dop.cons.DOP];
13-
1411
// Setting ~DOP object
1512
var object_dop = {},
1613
object_proxy,
@@ -74,19 +71,8 @@ dop.core.configureObject = function(object, property_parent, parent) {
7471
: object_target[property]
7572
is_function = isFunction(value)
7673

77-
// remote function
78-
if (
79-
is_function &&
80-
value._name == dop.cons.REMOTE_FUNCTION_UNSETUP
81-
) {
82-
path = dop.getObjectPath(object)
83-
object_target[property] = value(
84-
path[0],
85-
path.slice(1).concat(property)
86-
)
87-
}
8874
// computed value
89-
else if (is_function && value._name == dop.cons.COMPUTED_FUNCTION) {
75+
if (is_function && value._name == dop.cons.COMPUTED_FUNCTION) {
9076
delete object_target[property] // we need this line in order to remove the defineProperty of get syntax
9177
object_target[property] = value(
9278
object_proxy,

src/core/objects/mergeSubscription.js

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,8 @@ dop.core.mergeSubscription = function(object, object_remote) {
77
)
88
}
99

10-
dop.core.mergeSubscriptionMutator = function(
11-
destiny,
12-
prop,
13-
value,
14-
tof_value,
15-
path
16-
) {
17-
if (isFunction(value) && value._name == dop.cons.REMOTE_FUNCTION_UNSETUP)
18-
dop.set(destiny, prop, value(dop.getObjectId(destiny), path.slice(0)))
19-
else if (tof_value == 'object' || tof_value == 'array')
10+
dop.core.mergeSubscriptionMutator = function(destiny, prop, value, tof_value) {
11+
if (tof_value == 'object' || tof_value == 'array')
2012
!destiny.hasOwnProperty(prop)
2113
? (destiny[prop] = tof_value == 'array' ? [] : {})
2214
: destiny[prop]
Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
dop.core.createRemoteFunction = function(node) {
2-
var f = function(object_id, path) {
3-
// // http://jsperf.com/dynamic-name-of-functions
4-
// return new Function(
5-
// "var a=arguments;return function " + path[path.length-1] + "(){return a[0](a[1], a[2], a[3], arguments)}"
6-
// )(dop.protocol.call, node, object_id, path)
1+
dop.core.createRemoteFunction = function() {
2+
var f = function(node, object_owner_id, path) {
73
var f2 = function $DOP_REMOTE_FUNCTION() {
8-
return dop.protocol.call(node, object_id, path, arguments)
4+
return dop.protocol.call(node, object_owner_id, path, arguments)
95
}
106
f2._name = dop.cons.REMOTE_FUNCTION
117
return f2
128
}
139
f._name = dop.cons.REMOTE_FUNCTION_UNSETUP
1410
return f
1511
}
12+
13+
// // http://jsperf.com/dynamic-name-of-functions
14+
// return new Function(
15+
// "var a=arguments;return function " + path[path.length-1] + "(){return a[0](a[1], a[2], a[3], arguments)}"
16+
// )(dop.protocol.call, node, object_id, path)

src/core/protocol/decode.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
var regexpdate = /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ$/,
22
regexpsplit = /\/(.+)\/([gimuy]{0,5})/
33

4-
dop.core.decode = function(property, value, node, undefineds) {
4+
dop.core.decode = function(property, value, undefineds) {
55
if (typeof value == 'string') {
66
if (value == dop.protocol.instructionsPatchs.function)
7-
return dop.core.createRemoteFunction(node)
7+
return dop.core.createRemoteFunction()
88

99
if (
1010
value == dop.protocol.instructionsPatchs.undefined &&

src/core/protocol/onMessage.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ dop.core.onMessage = function(node, message_string) {
44
if (typeof message_string == 'string' && message_string[0] == '[') {
55
// https://jsperf.com/slice-substr-substring-test
66
try {
7-
messages = dop.decode(message_string, node)
7+
messages = dop.decode(message_string)
88
} catch (e) {
99
/*console.log(e);*/
1010
}

src/protocol/_onsubscribe.js

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,12 @@ dop.protocol._onsubscribe = function(node, request_id, request, response) {
77
var object_owner = response[2]
88
var object
99

10+
// Already subscribed
11+
if (node.owner[object_owner_id] !== undefined) {
12+
object = node.owner[object_owner_id].object
13+
}
1014
// New subscription
11-
if (node.owner[object_owner_id] === undefined) {
15+
else {
1216
var collector = dop.collect()
1317
// New object
1418
if (request.into === undefined) {
@@ -28,13 +32,10 @@ dop.protocol._onsubscribe = function(node, request_id, request, response) {
2832
object_owner
2933
)
3034
}
35+
dop.core.configureRemoteFunctions(node, object, object_owner_id)
3136
dop.core.registerOwner(node, object, object_owner_id)
3237
collector.emit()
3338
}
34-
// Already subscribed
35-
else {
36-
object = node.owner[object_owner_id].object
37-
}
3839

3940
// Resolving/Rejecting promise
4041
if (!isObject(object)) {
@@ -47,3 +48,19 @@ dop.protocol._onsubscribe = function(node, request_id, request, response) {
4748
}
4849
}
4950
}
51+
52+
dop.core.configureRemoteFunctions = function(node, object, object_owner_id) {
53+
dop.util.path(
54+
object,
55+
function(source, prop, value, destiny, path) {
56+
console.log(prop, object_owner_id, path.slice(0))
57+
if (
58+
isFunction(value) &&
59+
value._name == dop.cons.REMOTE_FUNCTION_UNSETUP
60+
) {
61+
// dop.set(source, prop, value(node, object_owner_id, path.slice(0)))
62+
}
63+
},
64+
{}
65+
)
66+
}

test/ES6/subscribe.js

Lines changed: 104 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -35,67 +35,114 @@ function connect(t) {
3535
test('basic', async t => {
3636
const { dopServer, nodeClient, close } = await connect(t)
3737
const objectServer = dopServer.register({
38-
hello: 'world'
38+
deep: { fun2: '() => {}' },
39+
hello: 'world',
40+
fun: '() => {}'
3941
})
40-
dopServer.onSubscribe(() => {
41-
return objectServer
42-
})
43-
const objectClient = await nodeClient.subscribe()
44-
t.deepEqual(objectServer, objectClient)
45-
close()
46-
})
47-
48-
test('into()', async t => {
49-
const { dopServer, nodeClient, close } = await connect(t)
50-
const objectServer = { hello: 'world' }
51-
const objectClient = {}
52-
t.notDeepEqual(objectServer, objectClient)
5342
dopServer.onSubscribe(() => objectServer)
54-
await nodeClient.subscribe().into(objectClient)
43+
const objectClient = await nodeClient.subscribe().into({})
5544
t.deepEqual(objectServer, objectClient)
5645
close()
5746
})
5847

59-
test('into() client deep object', async t => {
60-
const { dopServer, nodeClient, close } = await connect(t)
61-
const objectServer = { hello: 'world' }
62-
const objectClient = { deep: {} }
63-
t.notDeepEqual(objectServer, objectClient.deep)
64-
dopServer.onSubscribe(() => objectServer)
65-
await nodeClient.subscribe().into(objectClient.deep)
66-
t.deepEqual(objectServer, objectClient.deep)
67-
close()
68-
})
48+
// test('basic no registered', async t => {
49+
// const { dopServer, nodeClient, close } = await connect(t)
50+
// const objectServer = { hello: 'world' }
51+
// dopServer.onSubscribe(() => objectServer)
52+
// const objectClient = await nodeClient.subscribe()
53+
// t.deepEqual(objectServer, objectClient)
54+
// close()
55+
// })
6956

70-
test('into() observe', t => {
71-
const dopServer = dop.create()
72-
const dopClient = dop.create()
73-
const objectServer = dopServer.register({ inc: 0 })
74-
const objectClient = dopClient.register({ deep: {} })
75-
const transportServer = dopServer.listen({ transport: transportListen })
76-
dopServer.onSubscribe(() => objectServer)
77-
;(function loop(times) {
78-
const transportClient = dopClient.connect({
79-
transport: transportConnect
80-
})
81-
transportClient.on('connect', async nodeClient => {
82-
// t.notDeepEqual(objectServer, objectClient.deep)
83-
await nodeClient.subscribe().into(objectClient.deep)
84-
t.deepEqual(objectServer, objectClient.deep)
85-
const observer = dopClient.createObserver(() => {
86-
t.deepEqual(objectServer, objectClient.deep)
87-
setTimeout(() => {
88-
nodeClient.disconnect()
89-
if (times === 2) {
90-
t.end()
91-
transportServer.socket.close()
92-
} else {
93-
loop(times + 1)
94-
}
95-
}, 0)
96-
})
97-
observer.observeAll(objectClient)
98-
objectServer.inc += 1
99-
})
100-
})(1)
101-
})
57+
// test('basic deep', async t => {
58+
// const { dopServer, nodeClient, close } = await connect(t)
59+
// const objectServer = dopServer.register({
60+
// hello: 'world',
61+
// deep: { value: 'Hello World' }
62+
// })
63+
// dopServer.onSubscribe(() => objectServer.deep)
64+
// const objectClient = await nodeClient.subscribe()
65+
// t.deepEqual(objectServer.deep, objectClient)
66+
// close()
67+
// })
68+
69+
// test('into()', async t => {
70+
// const { dopServer, nodeClient, close } = await connect(t)
71+
// const objectServer = { hello: 'world' }
72+
// const objectClient = {}
73+
// t.notDeepEqual(objectServer, objectClient)
74+
// dopServer.onSubscribe(() => objectServer)
75+
// const objectClientInto = await nodeClient.subscribe().into(objectClient)
76+
// t.deepEqual(objectServer, objectClient)
77+
// t.notEqual(objectClientInto, objectClient)
78+
// t.equal(objectClientInto, dop.getObjectProxy(objectClient))
79+
// close()
80+
// })
81+
82+
// test('into() preregistered', async t => {
83+
// const { dopServer, dopClient, nodeClient, close } = await connect(t)
84+
// const objectServer = { hello: 'world' }
85+
// const objectClient = dopClient.register({})
86+
// t.notDeepEqual(objectServer, objectClient)
87+
// dopServer.onSubscribe(() => objectServer)
88+
// const objectClientInto = await nodeClient.subscribe().into(objectClient)
89+
// t.deepEqual(objectServer, objectClient)
90+
// t.equal(objectClientInto, objectClient)
91+
// close()
92+
// })
93+
94+
// test('into() client deep object', async t => {
95+
// const { dopServer, nodeClient, close } = await connect(t)
96+
// const objectServer = { hello: 'world' }
97+
// const objectClient = { deep: {} }
98+
// t.notDeepEqual(objectServer, objectClient.deep)
99+
// dopServer.onSubscribe(() => objectServer)
100+
// await nodeClient.subscribe().into(objectClient.deep)
101+
// t.deepEqual(objectServer, objectClient.deep)
102+
// close()
103+
// })
104+
105+
// test('into() client and server deep object', async t => {
106+
// const { dopServer, nodeClient, close } = await connect(t)
107+
// const objectServer = { hello: 'world', deep: { value: 'helloworld' } }
108+
// const objectClient = { hola: 'mundo', deep: { value: 'holamundo' } }
109+
// t.notDeepEqual(objectServer, objectClient)
110+
// dopServer.onSubscribe(() => objectServer.deep)
111+
// await nodeClient.subscribe().into(objectClient.deep)
112+
// t.deepEqual(objectServer.deep, objectClient.deep)
113+
// t.notDeepEqual(objectServer, objectClient)
114+
// close()
115+
// })
116+
117+
// test('into() observe', t => {
118+
// const dopServer = dop.create()
119+
// const dopClient = dop.create()
120+
// const objectServer = dopServer.register({ inc: 0 })
121+
// const objectClient = dopClient.register({ deep: {} })
122+
// const transportServer = dopServer.listen({ transport: transportListen })
123+
// dopServer.onSubscribe(() => objectServer)
124+
// ;(function loop(times) {
125+
// const transportClient = dopClient.connect({
126+
// transport: transportConnect
127+
// })
128+
// transportClient.on('connect', async nodeClient => {
129+
// // t.notDeepEqual(objectServer, objectClient.deep)
130+
// await nodeClient.subscribe().into(objectClient.deep)
131+
// t.deepEqual(objectServer, objectClient.deep)
132+
// const observer = dopClient.createObserver(() => {
133+
// t.deepEqual(objectServer, objectClient.deep)
134+
// setTimeout(() => {
135+
// nodeClient.disconnect()
136+
// if (times === 2) {
137+
// t.end()
138+
// transportServer.socket.close()
139+
// } else {
140+
// loop(times + 1)
141+
// }
142+
// }, 0)
143+
// })
144+
// observer.observeAll(objectClient)
145+
// objectServer.inc += 1
146+
// })
147+
// })(1)
148+
// })

0 commit comments

Comments
 (0)