Skip to content

Commit fbf320f

Browse files
committed
Calling remote function from caller
1 parent 3256c87 commit fbf320f

File tree

4 files changed

+30
-16
lines changed

4 files changed

+30
-16
lines changed

src/api/isRemoteFunction.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
dop.isRemoteFunction = function(fun) {
3+
return (isFunction(fun) && fun.name===dop.cons.REMOTE_FUNCTION);
4+
};

src/dop.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ var dop = {
2626
DOP: '~DOP',
2727
// CONNECT: '~CONNECT',
2828
SEND: '~SEND',
29-
DISCONNECT: '~DISCONNECT'
29+
DISCONNECT: '~DISCONNECT',
30+
REMOTE_FUNCTION: '$DOP_REMOTE_FUNCTION',
3031
}
3132

3233
};

src/protocol/_onsubscribe.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,22 @@ dop.protocol._onsubscribe = function(node, request_id, request, response) {
1010
var object_path = typeof response[1]=='number' ? [response[1]] : response[1],
1111
object_owner_id = object_path[0],
1212
object_owner = response[2],
13-
object;
13+
object, collector;
1414

1515
if (!isArray(object_path) || typeof object_owner_id!='number')
1616
request.promise.reject(dop.core.error.reject.OBJECT_NOT_FOUND);
1717

1818
else {
1919
if (node.owner[object_owner_id] === undefined) {
20-
var collector = dop.collectFirst();
21-
object = dop.register((dop.isObjectRegistrable(request.into)) ?
22-
dop.core.setActionRemote(request.into, object_owner)
23-
:
24-
object_owner);
20+
collector = dop.collectFirst();
21+
if (dop.isRegistered(request.into))
22+
object = dop.core.setActionRemote(request.into, object_owner);
23+
else
24+
object = dop.register((request.into===undefined) ?
25+
object_owner
26+
:
27+
dop.core.setActionLocal(request.into, object_owner)
28+
);
2529
dop.core.registerOwner(node, object, object_owner_id);
2630
collector.emitAndDestroy();
2731
}
@@ -30,9 +34,9 @@ dop.protocol._onsubscribe = function(node, request_id, request, response) {
3034

3135
object = dop.util.get(object, object_path.slice(1));
3236

33-
(!isObject(object)) ?
34-
request.promise.reject(dop.core.error.reject.OBJECT_NOT_FOUND)
35-
:
37+
if (!isObject(object))
38+
request.promise.reject(dop.core.error.reject.OBJECT_NOT_FOUND);
39+
else
3640
request.promise.resolve(object);
3741
}
3842
}

src/protocol/call.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,23 @@ dop.protocol.oncall = function(node, request_id, request) {
2929
if (isObject(object_data) && isObject(object_data.node[node.token]) && object_data.node[node.token].subscriber) {
3030
var f = dop.util.get(object_data.object, path);
3131
if (isFunction(f)) {
32-
dop.core.localProcedureCall(f, params, function(value) {
32+
function resolve(value) {
3333
var response = dop.core.createResponse(request_id, 0);
3434
if (value !== undefined)
3535
response.push(value);
3636
dop.core.storeSendMessages(node, response);
3737
return value;
38-
}, function(err){
38+
}
39+
function reject(err){
3940
dop.core.storeSendMessages(node, dop.core.createResponse(request_id, err));
40-
}, function(req) {
41-
req.node = node;
42-
return req;
43-
});
41+
}
42+
(dop.isRemoteFunction(f)) ?
43+
f.apply(null, params).then(resolve).catch(reject)
44+
:
45+
dop.core.localProcedureCall(f, params, resolve, reject, function(req) {
46+
req.node = node;
47+
return req;
48+
});
4449
}
4550
}
4651
};

0 commit comments

Comments
 (0)