Mon 21 Jul 22:43:21 CEST 2025

This commit is contained in:
sbosse 2025-07-21 23:12:14 +02:00
parent 271f7b22a1
commit d9364805d6

66
js/rpc/rpc.js Normal file
View 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
}