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