Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
271f7b22a1
commit
d9364805d6
66
js/rpc/rpc.js
Normal file
66
js/rpc/rpc.js
Normal file
|
@ -0,0 +1,66 @@
|
|||
var udprpc = Require('rpc/udp_rpc');
|
||||
var version = "1.1.3"
|
||||
|
||||
function rpc(proto,port,arrayOfNamedFunctions,options) {
|
||||
options=options||{}
|
||||
switch (proto.toUpperCase()) {
|
||||
case 'UDP':
|
||||
return new udprpc(options.dgramType||'udp4',port,
|
||||
arrayOfNamedFunctions,options);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
var clientCache=[];
|
||||
// server
|
||||
function getreq (url, requestCallback, options) {
|
||||
var proto = url.match(/^([a-zA-Z]+):/),
|
||||
port = url.match(/([0-9]+)$/);
|
||||
proto=(proto&&proto[1])||'udp';
|
||||
port=(port&&port[1]);
|
||||
if (!port) throw Error('getreq: invalid port');
|
||||
var myport = rpc(proto,port,[
|
||||
function request(source, data, callback) {
|
||||
callback(requestCallback(data,source))
|
||||
}
|
||||
],options)
|
||||
return myport;
|
||||
}
|
||||
// client
|
||||
function trans (url,data,replyCallback,options) {
|
||||
var proto = url.match(/^([a-zA-Z]+):/),
|
||||
destination = url.replace(/^([a-zA-Z]+):\/\//,''),
|
||||
port = url.match(/([0-9]+)$/);
|
||||
proto=(proto&&proto[1])||'udp';
|
||||
port=(port&&port[1]);
|
||||
if (!port) throw Error('getreq: invalid port');
|
||||
if (clientCache[url]) {
|
||||
if (clientCache[url].state!='listening') {
|
||||
clientCache[url].queue.push([destination,data,replyCallback]);
|
||||
} else
|
||||
clientCache[url].request(destination,data,replyCallback||function(){});
|
||||
clientCache[url].timestamp=Date.now();
|
||||
} else {
|
||||
var myport = clientCache[url] = rpc(proto,0,[
|
||||
function request(source, data, callback) {}
|
||||
],options);
|
||||
clientCache[url].timestamp=Date.now();
|
||||
clientCache[url].queue=[];
|
||||
clientCache[url].queue.push([destination,data,replyCallback]);
|
||||
myport.on('init',function () {
|
||||
while (clientCache[url].queue.length) {
|
||||
var next = clientCache[url].queue.shift();
|
||||
myport.request(next[0],next[1],next[2]||function(){});
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
clientCache : clientCache,
|
||||
rpc : rpc,
|
||||
getreq : getreq,
|
||||
trans : trans,
|
||||
version : version
|
||||
}
|
Loading…
Reference in New Issue
Block a user