Skip to content

Commit af806b3

Browse files
committed
Implemented dop.getRequest
1 parent 9505fae commit af806b3

File tree

5 files changed

+176
-71
lines changed

5 files changed

+176
-71
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "dop",
3-
"version": "0.40.1",
3+
"version": "0.41.0",
44
"main": "./dist/dop.nodejs.js",
55
"browser": "./dist/dop.js",
66
"unpkg": "./dist/dop.min.js",

src/api/getRequest.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
dop.getRequest = function(args) {
2+
args = Array.prototype.slice.call(args, 0)
3+
var request = args[args.length - 1]
4+
if (
5+
request instanceof Promise &&
6+
request.hasOwnProperty('resolve') &&
7+
request.hasOwnProperty('reject')
8+
)
9+
return request
10+
11+
return dop.core.createAsync()
12+
}

src/api/isRemoteFunction.js

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

src/protocol/onfunction.js

Lines changed: 67 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,67 @@
1-
// Used by dop.protocol.oncall && dop.protocol.onbroadcast
2-
dop.protocol.onfunction = function(
3-
node,
4-
request_id,
5-
request,
6-
object_id,
7-
validator
8-
) {
9-
var path = request[2],
10-
params = request[3],
11-
object_data = dop.data.object[object_id]
12-
13-
if (
14-
isObject(object_data) &&
15-
isObject(object_data.node[node.token]) &&
16-
validator(object_data.node[node.token])
17-
) {
18-
var function_name = path.pop(),
19-
object = dop.util.get(object_data.object, path),
20-
f = object[function_name]
21-
if (isFunction(f) && !dop.isBroadcastFunction(f)) {
22-
function resolve(value) {
23-
var response = dop.core.createResponse(request_id, 0)
24-
if (value !== undefined) response.push(value)
25-
dop.core.storeSendMessages(node, response)
26-
return value
27-
}
28-
function reject(err) {
29-
dop.core.storeSendMessages(
30-
node,
31-
dop.core.createResponse(
32-
request_id,
33-
dop.core.error.reject_remote.CUSTOM_REJECTION,
34-
err
35-
)
36-
)
37-
}
38-
39-
if (dop.isRemoteFunction(f))
40-
f.apply(null, params)
41-
.then(resolve)
42-
.catch(reject)
43-
else
44-
dop.core.localProcedureCall(
45-
f,
46-
params,
47-
resolve,
48-
reject,
49-
function(req) {
50-
req.node = node
51-
return req
52-
},
53-
dop.getObjectProxy(object)
54-
)
55-
56-
return
57-
}
58-
}
59-
60-
dop.core.storeSendMessages(
61-
node,
62-
dop.core.createResponse(
63-
request_id,
64-
dop.core.error.reject_remote.FUNCTION_NOT_FOUND
65-
)
66-
)
67-
}
1+
// Used by dop.protocol.oncall && dop.protocol.onbroadcast
2+
dop.protocol.onfunction = function(
3+
node,
4+
request_id,
5+
request,
6+
object_id,
7+
validator
8+
) {
9+
var path = request[2],
10+
params = request[3],
11+
object_data = dop.data.object[object_id]
12+
13+
if (
14+
isObject(object_data) &&
15+
isObject(object_data.node[node.token]) &&
16+
validator(object_data.node[node.token])
17+
) {
18+
var function_name = path.pop(),
19+
object = dop.util.get(object_data.object, path),
20+
f = object[function_name]
21+
if (isFunction(f) && !dop.isBroadcastFunction(f)) {
22+
function resolve(value) {
23+
var response = dop.core.createResponse(request_id, 0)
24+
if (value !== undefined) response.push(value)
25+
dop.core.storeSendMessages(node, response)
26+
return value
27+
}
28+
function reject(err) {
29+
dop.core.storeSendMessages(
30+
node,
31+
dop.core.createResponse(
32+
request_id,
33+
dop.core.error.reject_remote.CUSTOM_REJECTION,
34+
err
35+
)
36+
)
37+
}
38+
39+
if (dop.isRemoteFunction(f))
40+
f.apply(null, params)
41+
.then(resolve)
42+
.catch(reject)
43+
else
44+
dop.core.localProcedureCall(
45+
f,
46+
params,
47+
resolve,
48+
reject,
49+
function(req) {
50+
req.node = node
51+
return req
52+
},
53+
dop.getObjectProxy(object)
54+
)
55+
56+
return
57+
}
58+
}
59+
60+
dop.core.storeSendMessages(
61+
node,
62+
dop.core.createResponse(
63+
request_id,
64+
dop.core.error.reject_remote.FUNCTION_NOT_FOUND
65+
)
66+
)
67+
}

test/getrequest.js

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
var test = require('tape')
2+
var dopServer = require('./.proxy').create()
3+
var dopClient = require('./.proxy').create()
4+
var transportName = process.argv[2] || 'local'
5+
var transportListen = require('dop-transports').listen[transportName]
6+
var transportConnect = require('dop-transports').connect[transportName]
7+
dopServer.env = 'SERVER'
8+
dopClient.env = 'CLIENT'
9+
10+
// this code would be in node.js
11+
var server = dopServer.listen({ transport: transportListen })
12+
// this code would be in browser
13+
var client = dopClient.connect({
14+
transport: transportConnect,
15+
listener: server
16+
})
17+
18+
var tGlobal // used to test outside tests clausures
19+
20+
var localFunctions = dopServer.register({
21+
checkRequestObject: function() {
22+
const request = dopServer.getRequest(arguments)
23+
tGlobal.equal(request instanceof Promise, true)
24+
tGlobal.equal(request.hasOwnProperty('resolve'), true)
25+
tGlobal.equal(request.hasOwnProperty('reject'), true)
26+
// tGlobal.equal(request.node instanceof dopServer.core.node, true)
27+
},
28+
checkRequestObjectAsArgs: function() {
29+
const args = Array.prototype.slice.call(arguments, 0)
30+
const request = dopServer.getRequest(args)
31+
tGlobal.equal(request instanceof Promise, true)
32+
tGlobal.equal(request.hasOwnProperty('resolve'), true)
33+
tGlobal.equal(request.hasOwnProperty('reject'), true)
34+
// tGlobal.equal(request.node instanceof dopServer.core.node, true)
35+
},
36+
checkNodePropertyRemote: function() {
37+
const request = dopServer.getRequest(arguments)
38+
tGlobal.equal(request instanceof Promise, true)
39+
tGlobal.equal(request.hasOwnProperty('resolve'), true)
40+
tGlobal.equal(request.hasOwnProperty('reject'), true)
41+
tGlobal.equal(request.node instanceof dopServer.core.node, true)
42+
},
43+
checkNodePropertyLocal: function() {
44+
const request = dopServer.getRequest(arguments)
45+
tGlobal.equal(request instanceof Promise, true)
46+
tGlobal.equal(request.hasOwnProperty('resolve'), true)
47+
tGlobal.equal(request.hasOwnProperty('reject'), true)
48+
tGlobal.equal(request.hasOwnProperty('node'), false)
49+
}
50+
})
51+
52+
// server
53+
dopServer.onSubscribe(function() {
54+
return localFunctions
55+
})
56+
57+
var remoteFunctions
58+
test('Subscribing', function(t) {
59+
client.subscribe().then(function(obj) {
60+
remoteFunctions = obj
61+
t.deepEqual(Object.keys(remoteFunctions), Object.keys(localFunctions))
62+
t.end()
63+
})
64+
})
65+
66+
test('checkRequestObject', function(t) {
67+
tGlobal = t
68+
remoteFunctions.checkRequestObject()
69+
localFunctions.checkRequestObject()
70+
// t.equal()
71+
t.end()
72+
})
73+
74+
test('checkRequestObjectAsArgs', function(t) {
75+
tGlobal = t
76+
remoteFunctions.checkRequestObject()
77+
localFunctions.checkRequestObject()
78+
// t.equal()
79+
t.end()
80+
})
81+
82+
test('checkNodePropertyRemote', function(t) {
83+
tGlobal = t
84+
remoteFunctions.checkNodePropertyRemote()
85+
t.end()
86+
})
87+
88+
test('checkNodePropertyLocal', function(t) {
89+
tGlobal = t
90+
localFunctions.checkNodePropertyLocal()
91+
t.end()
92+
server.listener.close()
93+
})

0 commit comments

Comments
 (0)