Skip to content

Commit 78501fd

Browse files
committed
Basics implemented for call instruction
1 parent 4fc3e3d commit 78501fd

File tree

9 files changed

+74
-28
lines changed

9 files changed

+74
-28
lines changed

src/api/decode.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
11

22
dop.decode = function(data, node) {
3-
var functions = [],
4-
undefineds = [],
3+
var undefineds = [],
54
index = 0,
65
total,
76
output = JSON.parse(data, function(property, value) {
8-
return dop.core.decode.call(this, property, value, functions, undefineds);
7+
return dop.core.decode.call(this, property, value, node, undefineds);
98
});
109

11-
12-
for (total=functions.length; index<total; ++index)
13-
functions[index][0][functions[index][1]] = dop.core.createRemoteFunction(node);
14-
1510
for (total=undefineds.length,index=0; index<total; ++index)
1611
undefineds[index][0][undefineds[index][1]] = undefined;
1712

src/core/error.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ dop.core.error = {
88
reject: {
99
OBJECT_NOT_FOUND: 'Object not found',
1010
SUBSCRIPTION_NOT_FOUND: 'Not subscription found to unsubscribe this object',
11+
FUNCTION_NOT_FOUND: 'Function not found',
1112
}
1213

1314
};
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11

22
dop.core.setActionRemote = function(object, action) {
33
dop.util.path({a:action}, null, {a:object}, function(destiny, prop, value, typeofValue, path){
4-
return (isFunction(value) && value.name==dop.core.createRemoteFunction.name) ?
5-
dop.set(destiny, prop, value(dop.getObjectDop(object)[0], path.slice(1)))
6-
:
7-
dop.core.setActionMutator(destiny, prop, value, typeofValue, path);
4+
if (isFunction(value) && value.name==dop.core.createRemoteFunction.name)
5+
dop.set(destiny, prop, value(dop.getObjectDop(object)[0], path.slice(1)));
6+
else
7+
return dop.core.setActionMutator(destiny, prop, value, typeofValue, path);
88
});
99
return object;
1010
};

src/core/protocol/createRemoteFunction.js

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,3 @@ dop.core.createRemoteFunction = function $DOP_REMOTE_FUNCTION_UNSETUP(node) {
1010
}
1111
}
1212
};
13-
dop.protocol.call = function(node, object_id, path, params) {
14-
15-
var params = Array.prototype.slice.call(params, 0);
16-
17-
console.log(node.token, dop.data.object[object_id].node[node.token].owner, path, params);
18-
};

src/core/protocol/decode.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
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, functions, undefineds) {
4+
dop.core.decode = function(property, value, node, undefineds) {
55

66
if (typeof value == 'string') {
77

8-
if (value === '~F') {
9-
functions.push([this, property]);
10-
return undefined;
11-
}
8+
if (value === '~F')
9+
return dop.core.createRemoteFunction(node);
1210

1311
if (value == '~U' && isObject(undefineds)) {
14-
undefineds.push([this, property]); // http://stackoverflow.com/questions/17648150/how-does-json-parse-manage-undefined
15-
return undefined;
12+
this[property] = undefined;
13+
// undefineds.push([this, property]); // http://stackoverflow.com/questions/17648150/how-does-json-parse-manage-undefined
14+
// return undefined;
1615
}
1716

1817
if (value === '~I')

src/protocol/_onsubscribe.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,4 @@ dop.protocol._onsubscribe = function(node, request_id, request, response) {
3737
}
3838
}
3939
}
40-
4140
};

src/protocol/call.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
2+
dop.protocol.call = function(node, object_id, path, params) {
3+
4+
var object_data = dop.data.object[object_id];
5+
6+
if (isObject(object_data) && isObject(object_data.node[node.token]) && object_data.node[node.token].owner>0) {
7+
params = Array.prototype.slice.call(params, 0);
8+
var request = dop.core.createRequest(
9+
node,
10+
dop.protocol.instructions.call,
11+
object_data.node[node.token].owner,
12+
path,
13+
params
14+
);
15+
dop.core.storeSendMessages(node, request);
16+
return request.promise;
17+
}
18+
else
19+
return Promise.reject(dop.core.error.reject.OBJECT_NOT_FOUND);
20+
};
21+
22+
23+
dop.protocol.oncall = function(node, request_id, request) {
24+
var object_id = request[1],
25+
path = request[2],
26+
params = request[3],
27+
object_data = dop.data.object[object_id];
28+
29+
if (isObject(object_data) && isObject(object_data.node[node.token]) && object_data.node[node.token].subscriber) {
30+
var f = dop.util.get(object_data.object, path);
31+
if (isFunction(f)) {
32+
dop.core.localProcedureCall(f, params, function(value) {
33+
var response = dop.core.createResponse(request_id, 0);
34+
if (value !== undefined)
35+
response.push(value);
36+
dop.core.storeSendMessages(node, response);
37+
return value;
38+
}, function(err){
39+
dop.core.storeSendMessages(node, dop.core.createResponse(request_id, err));
40+
}, function(req) {
41+
req.node = node;
42+
return req;
43+
});
44+
}
45+
}
46+
};
47+
48+
49+
dop.protocol._oncall = function(node, request_id, request, response) {
50+
var rejection = response[0];
51+
if (rejection !== undefined) {
52+
(rejection !== 0) ?
53+
request.promise.reject(rejection)
54+
:
55+
request.promise.resolve(response[1]);
56+
}
57+
};
58+

src/protocol/onsubscribe.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ 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);
6+
var params = Array.prototype.slice.call(request, 1);
77

8-
dop.core.localProcedureCall(dop.data.onsubscribe, args, function resolve(value) {
8+
dop.core.localProcedureCall(dop.data.onsubscribe, params, function resolve(value) {
99
if (isObject(value)) {
1010
var object = dop.register(value),
1111
object_id = dop.getObjectId(object),

src/protocol/unsubscribe.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ dop.protocol.unsubscribe = function(node, object) {
33
var object_id = dop.getObjectId(object),
44
object_data = dop.data.object[object_id];
55

6-
if (isObject(object_data) && isObject(object_data.node[node.token]) && object_data.node[node.token].owner) {
6+
if (isObject(object_data) && isObject(object_data.node[node.token]) && object_data.node[node.token].owner>0) {
77
var request = dop.core.createRequest(
88
node,
99
dop.protocol.instructions.unsubscribe,

0 commit comments

Comments
 (0)