-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathrpc.js
61 lines (54 loc) · 1.54 KB
/
rpc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/**
* @type {{createCaller: Function, parseMessage: Function}}
*/
const RPC = {
/**
* @param {Object} target must have `send` method
* @returns {Function} (String name, ...args)
*/
createCaller(target) {
return function(name, ...args) {
const message = { cmd: 'luster_' + name };
if (args.length > 0) {
message.args = args;
}
target.send(message);
};
},
/**
* @typedef IPCMessage
* @property {String} cmd Command name, starts with the prefix 'luster_'
* @property {Array} [args] Command arguments
*/
/**
* @param {*} message
* @returns IPCMessage|null IPCMessage if `message` is valid luster IPC message, null – while not
*/
parseMessage(message) {
if (message &&
typeof message.cmd === 'string' &&
message.cmd.indexOf('luster_') === 0) {
return /** @type IPCMessage */{
cmd: message.cmd.substr(7),
args: message.args
};
} else {
return null;
}
},
/**
* Core remote functions dictionaries
*/
fns: {
worker: {
broadcastMasterEvent: 'core.worker.broadcastMasterEvent',
applyForeignProperties: 'core.worker.applyForeignProperties',
suspend: 'core.worker.suspend'
},
master: {
broadcastWorkerEvent: 'core.master.broadcastWorkerEvent'
},
callback: 'core.callback'
}
};
module.exports = RPC;