mirror of https://github.com/OpenVidu/openvidu.git
openvidu-browser: beautify .js files
parent
ae686ffbb6
commit
317b388088
|
@ -1,49 +1,45 @@
|
||||||
function Mapper()
|
function Mapper() {
|
||||||
{
|
|
||||||
var sources = {};
|
var sources = {};
|
||||||
|
|
||||||
|
|
||||||
this.forEach = function(callback)
|
this.forEach = function (callback) {
|
||||||
{
|
for (var key in sources) {
|
||||||
for(var key in sources)
|
|
||||||
{
|
|
||||||
var source = sources[key];
|
var source = sources[key];
|
||||||
|
|
||||||
for(var key2 in source)
|
for (var key2 in source)
|
||||||
callback(source[key2]);
|
callback(source[key2]);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
this.get = function(id, source)
|
this.get = function (id, source) {
|
||||||
{
|
|
||||||
var ids = sources[source];
|
var ids = sources[source];
|
||||||
if(ids == undefined)
|
if (ids == undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
return ids[id];
|
return ids[id];
|
||||||
};
|
};
|
||||||
|
|
||||||
this.remove = function(id, source)
|
this.remove = function (id, source) {
|
||||||
{
|
|
||||||
var ids = sources[source];
|
var ids = sources[source];
|
||||||
if(ids == undefined)
|
if (ids == undefined)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
delete ids[id];
|
delete ids[id];
|
||||||
|
|
||||||
// Check it's empty
|
// Check it's empty
|
||||||
for(var i in ids){return false}
|
for (var i in ids) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
delete sources[source];
|
delete sources[source];
|
||||||
};
|
};
|
||||||
|
|
||||||
this.set = function(value, id, source)
|
this.set = function (value, id, source) {
|
||||||
{
|
if (value == undefined)
|
||||||
if(value == undefined)
|
|
||||||
return this.remove(id, source);
|
return this.remove(id, source);
|
||||||
|
|
||||||
var ids = sources[source];
|
var ids = sources[source];
|
||||||
if(ids == undefined)
|
if (ids == undefined)
|
||||||
sources[source] = ids = {};
|
sources[source] = ids = {};
|
||||||
|
|
||||||
ids[id] = value;
|
ids[id] = value;
|
||||||
|
@ -51,10 +47,9 @@ function Mapper()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Mapper.prototype.pop = function(id, source)
|
Mapper.prototype.pop = function (id, source) {
|
||||||
{
|
|
||||||
var value = this.get(id, source);
|
var value = this.get(id, source);
|
||||||
if(value == undefined)
|
if (value == undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
this.remove(id, source);
|
this.remove(id, source);
|
||||||
|
@ -63,4 +58,4 @@ Mapper.prototype.pop = function(id, source)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
module.exports = Mapper;
|
module.exports = Mapper;
|
|
@ -15,7 +15,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var JsonRpcClient = require('./jsonrpcclient');
|
var JsonRpcClient = require('./jsonrpcclient');
|
||||||
|
|
||||||
|
|
||||||
exports.JsonRpcClient = JsonRpcClient;
|
exports.JsonRpcClient = JsonRpcClient;
|
|
@ -15,7 +15,6 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var WebSocketWithReconnection = require('./webSocketWithReconnection');
|
var WebSocketWithReconnection = require('./webSocketWithReconnection');
|
||||||
|
|
||||||
|
exports.WebSocketWithReconnection = WebSocketWithReconnection;
|
||||||
exports.WebSocketWithReconnection = WebSocketWithReconnection;
|
|
|
@ -17,36 +17,32 @@
|
||||||
|
|
||||||
|
|
||||||
var defineProperty_IE8 = false
|
var defineProperty_IE8 = false
|
||||||
if(Object.defineProperty)
|
if (Object.defineProperty) {
|
||||||
{
|
try {
|
||||||
try
|
|
||||||
{
|
|
||||||
Object.defineProperty({}, "x", {});
|
Object.defineProperty({}, "x", {});
|
||||||
}
|
} catch (e) {
|
||||||
catch(e)
|
|
||||||
{
|
|
||||||
defineProperty_IE8 = true
|
defineProperty_IE8 = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
|
||||||
if (!Function.prototype.bind) {
|
if (!Function.prototype.bind) {
|
||||||
Function.prototype.bind = function(oThis) {
|
Function.prototype.bind = function (oThis) {
|
||||||
if (typeof this !== 'function') {
|
if (typeof this !== 'function') {
|
||||||
// closest thing possible to the ECMAScript 5
|
// closest thing possible to the ECMAScript 5
|
||||||
// internal IsCallable function
|
// internal IsCallable function
|
||||||
throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
|
throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
|
||||||
}
|
}
|
||||||
|
|
||||||
var aArgs = Array.prototype.slice.call(arguments, 1),
|
var aArgs = Array.prototype.slice.call(arguments, 1),
|
||||||
fToBind = this,
|
fToBind = this,
|
||||||
fNOP = function() {},
|
fNOP = function () {},
|
||||||
fBound = function() {
|
fBound = function () {
|
||||||
return fToBind.apply(this instanceof fNOP && oThis
|
return fToBind.apply(this instanceof fNOP && oThis ?
|
||||||
? this
|
this :
|
||||||
: oThis,
|
oThis,
|
||||||
aArgs.concat(Array.prototype.slice.call(arguments)));
|
aArgs.concat(Array.prototype.slice.call(arguments)));
|
||||||
};
|
};
|
||||||
|
|
||||||
fNOP.prototype = this.prototype;
|
fNOP.prototype = this.prototype;
|
||||||
fBound.prototype = new fNOP();
|
fBound.prototype = new fNOP();
|
||||||
|
@ -67,17 +63,14 @@ var Mapper = require('./Mapper');
|
||||||
var BASE_TIMEOUT = 5000;
|
var BASE_TIMEOUT = 5000;
|
||||||
|
|
||||||
|
|
||||||
function unifyResponseMethods(responseMethods)
|
function unifyResponseMethods(responseMethods) {
|
||||||
{
|
if (!responseMethods) return {};
|
||||||
if(!responseMethods) return {};
|
|
||||||
|
|
||||||
for(var key in responseMethods)
|
for (var key in responseMethods) {
|
||||||
{
|
|
||||||
var value = responseMethods[key];
|
var value = responseMethods[key];
|
||||||
|
|
||||||
if(typeof value == 'string')
|
if (typeof value == 'string')
|
||||||
responseMethods[key] =
|
responseMethods[key] = {
|
||||||
{
|
|
||||||
response: value
|
response: value
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -85,35 +78,34 @@ function unifyResponseMethods(responseMethods)
|
||||||
return responseMethods;
|
return responseMethods;
|
||||||
};
|
};
|
||||||
|
|
||||||
function unifyTransport(transport)
|
function unifyTransport(transport) {
|
||||||
{
|
if (!transport) return;
|
||||||
if(!transport) return;
|
|
||||||
|
|
||||||
// Transport as a function
|
// Transport as a function
|
||||||
if(transport instanceof Function)
|
if (transport instanceof Function)
|
||||||
return {send: transport};
|
return {
|
||||||
|
send: transport
|
||||||
|
};
|
||||||
|
|
||||||
// WebSocket & DataChannel
|
// WebSocket & DataChannel
|
||||||
if(transport.send instanceof Function)
|
if (transport.send instanceof Function)
|
||||||
return transport;
|
return transport;
|
||||||
|
|
||||||
// Message API (Inter-window & WebWorker)
|
// Message API (Inter-window & WebWorker)
|
||||||
if(transport.postMessage instanceof Function)
|
if (transport.postMessage instanceof Function) {
|
||||||
{
|
|
||||||
transport.send = transport.postMessage;
|
transport.send = transport.postMessage;
|
||||||
return transport;
|
return transport;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stream API
|
// Stream API
|
||||||
if(transport.write instanceof Function)
|
if (transport.write instanceof Function) {
|
||||||
{
|
|
||||||
transport.send = transport.write;
|
transport.send = transport.write;
|
||||||
return transport;
|
return transport;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transports that only can receive messages, but not send
|
// Transports that only can receive messages, but not send
|
||||||
if(transport.onmessage !== undefined) return;
|
if (transport.onmessage !== undefined) return;
|
||||||
if(transport.pause instanceof Function) return;
|
if (transport.pause instanceof Function) return;
|
||||||
|
|
||||||
throw new SyntaxError("Transport is not a function nor a valid object");
|
throw new SyntaxError("Transport is not a function nor a valid object");
|
||||||
};
|
};
|
||||||
|
@ -129,17 +121,19 @@ function unifyTransport(transport)
|
||||||
* @param {String} method -method of the notification
|
* @param {String} method -method of the notification
|
||||||
* @param params - parameters of the notification
|
* @param params - parameters of the notification
|
||||||
*/
|
*/
|
||||||
function RpcNotification(method, params)
|
function RpcNotification(method, params) {
|
||||||
{
|
if (defineProperty_IE8) {
|
||||||
if(defineProperty_IE8)
|
|
||||||
{
|
|
||||||
this.method = method
|
this.method = method
|
||||||
this.params = params
|
this.params = params
|
||||||
}
|
} else {
|
||||||
else
|
Object.defineProperty(this, 'method', {
|
||||||
{
|
value: method,
|
||||||
Object.defineProperty(this, 'method', {value: method, enumerable: true});
|
enumerable: true
|
||||||
Object.defineProperty(this, 'params', {value: params, enumerable: true});
|
});
|
||||||
|
Object.defineProperty(this, 'params', {
|
||||||
|
value: params,
|
||||||
|
enumerable: true
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -157,50 +151,46 @@ function RpcNotification(method, params)
|
||||||
*
|
*
|
||||||
* @param {Function} [onRequest]
|
* @param {Function} [onRequest]
|
||||||
*/
|
*/
|
||||||
function RpcBuilder(packer, options, transport, onRequest)
|
function RpcBuilder(packer, options, transport, onRequest) {
|
||||||
{
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
if(!packer)
|
if (!packer)
|
||||||
throw new SyntaxError('Packer is not defined');
|
throw new SyntaxError('Packer is not defined');
|
||||||
|
|
||||||
if(!packer.pack || !packer.unpack)
|
if (!packer.pack || !packer.unpack)
|
||||||
throw new SyntaxError('Packer is invalid');
|
throw new SyntaxError('Packer is invalid');
|
||||||
|
|
||||||
var responseMethods = unifyResponseMethods(packer.responseMethods);
|
var responseMethods = unifyResponseMethods(packer.responseMethods);
|
||||||
|
|
||||||
|
|
||||||
if(options instanceof Function)
|
if (options instanceof Function) {
|
||||||
{
|
if (transport != undefined)
|
||||||
if(transport != undefined)
|
|
||||||
throw new SyntaxError("There can't be parameters after onRequest");
|
throw new SyntaxError("There can't be parameters after onRequest");
|
||||||
|
|
||||||
onRequest = options;
|
onRequest = options;
|
||||||
transport = undefined;
|
transport = undefined;
|
||||||
options = undefined;
|
options = undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
if(options && options.send instanceof Function)
|
if (options && options.send instanceof Function) {
|
||||||
{
|
if (transport && !(transport instanceof Function))
|
||||||
if(transport && !(transport instanceof Function))
|
|
||||||
throw new SyntaxError("Only a function can be after transport");
|
throw new SyntaxError("Only a function can be after transport");
|
||||||
|
|
||||||
onRequest = transport;
|
onRequest = transport;
|
||||||
transport = options;
|
transport = options;
|
||||||
options = undefined;
|
options = undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
if(transport instanceof Function)
|
if (transport instanceof Function) {
|
||||||
{
|
if (onRequest != undefined)
|
||||||
if(onRequest != undefined)
|
|
||||||
throw new SyntaxError("There can't be parameters after onRequest");
|
throw new SyntaxError("There can't be parameters after onRequest");
|
||||||
|
|
||||||
onRequest = transport;
|
onRequest = transport;
|
||||||
transport = undefined;
|
transport = undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
if(transport && transport.send instanceof Function)
|
if (transport && transport.send instanceof Function)
|
||||||
if(onRequest && !(onRequest instanceof Function))
|
if (onRequest && !(onRequest instanceof Function))
|
||||||
throw new SyntaxError("Only a function can be after transport");
|
throw new SyntaxError("Only a function can be after transport");
|
||||||
|
|
||||||
options = options || {};
|
options = options || {};
|
||||||
|
@ -208,59 +198,55 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
|
|
||||||
EventEmitter.call(this);
|
EventEmitter.call(this);
|
||||||
|
|
||||||
if(onRequest)
|
if (onRequest)
|
||||||
this.on('request', onRequest);
|
this.on('request', onRequest);
|
||||||
|
|
||||||
|
|
||||||
if(defineProperty_IE8)
|
if (defineProperty_IE8)
|
||||||
this.peerID = options.peerID
|
this.peerID = options.peerID
|
||||||
else
|
else
|
||||||
Object.defineProperty(this, 'peerID', {value: options.peerID});
|
Object.defineProperty(this, 'peerID', {
|
||||||
|
value: options.peerID
|
||||||
|
});
|
||||||
|
|
||||||
var max_retries = options.max_retries || 0;
|
var max_retries = options.max_retries || 0;
|
||||||
|
|
||||||
|
|
||||||
function transportMessage(event)
|
function transportMessage(event) {
|
||||||
{
|
|
||||||
self.decode(event.data || event);
|
self.decode(event.data || event);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.getTransport = function()
|
this.getTransport = function () {
|
||||||
{
|
|
||||||
return transport;
|
return transport;
|
||||||
}
|
}
|
||||||
this.setTransport = function(value)
|
this.setTransport = function (value) {
|
||||||
{
|
|
||||||
// Remove listener from old transport
|
// Remove listener from old transport
|
||||||
if(transport)
|
if (transport) {
|
||||||
{
|
|
||||||
// W3C transports
|
// W3C transports
|
||||||
if(transport.removeEventListener)
|
if (transport.removeEventListener)
|
||||||
transport.removeEventListener('message', transportMessage);
|
transport.removeEventListener('message', transportMessage);
|
||||||
|
|
||||||
// Node.js Streams API
|
// Node.js Streams API
|
||||||
else if(transport.removeListener)
|
else if (transport.removeListener)
|
||||||
transport.removeListener('data', transportMessage);
|
transport.removeListener('data', transportMessage);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Set listener on new transport
|
// Set listener on new transport
|
||||||
if(value)
|
if (value) {
|
||||||
{
|
|
||||||
// W3C transports
|
// W3C transports
|
||||||
if(value.addEventListener)
|
if (value.addEventListener)
|
||||||
value.addEventListener('message', transportMessage);
|
value.addEventListener('message', transportMessage);
|
||||||
|
|
||||||
// Node.js Streams API
|
// Node.js Streams API
|
||||||
else if(value.addListener)
|
else if (value.addListener)
|
||||||
value.addListener('data', transportMessage);
|
value.addListener('data', transportMessage);
|
||||||
};
|
};
|
||||||
|
|
||||||
transport = unifyTransport(value);
|
transport = unifyTransport(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!defineProperty_IE8)
|
if (!defineProperty_IE8)
|
||||||
Object.defineProperty(this, 'transport',
|
Object.defineProperty(this, 'transport', {
|
||||||
{
|
|
||||||
get: this.getTransport.bind(this),
|
get: this.getTransport.bind(this),
|
||||||
set: this.setTransport.bind(this)
|
set: this.setTransport.bind(this)
|
||||||
})
|
})
|
||||||
|
@ -268,15 +254,15 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
this.setTransport(transport);
|
this.setTransport(transport);
|
||||||
|
|
||||||
|
|
||||||
var request_timeout = options.request_timeout || BASE_TIMEOUT;
|
var request_timeout = options.request_timeout || BASE_TIMEOUT;
|
||||||
var ping_request_timeout = options.ping_request_timeout || request_timeout;
|
var ping_request_timeout = options.ping_request_timeout || request_timeout;
|
||||||
var response_timeout = options.response_timeout || BASE_TIMEOUT;
|
var response_timeout = options.response_timeout || BASE_TIMEOUT;
|
||||||
var duplicates_timeout = options.duplicates_timeout || BASE_TIMEOUT;
|
var duplicates_timeout = options.duplicates_timeout || BASE_TIMEOUT;
|
||||||
|
|
||||||
|
|
||||||
var requestID = 0;
|
var requestID = 0;
|
||||||
|
|
||||||
var requests = new Mapper();
|
var requests = new Mapper();
|
||||||
var responses = new Mapper();
|
var responses = new Mapper();
|
||||||
var processedResponses = new Mapper();
|
var processedResponses = new Mapper();
|
||||||
|
|
||||||
|
@ -286,17 +272,14 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
/**
|
/**
|
||||||
* Store the response to prevent to process duplicate request later
|
* Store the response to prevent to process duplicate request later
|
||||||
*/
|
*/
|
||||||
function storeResponse(message, id, dest)
|
function storeResponse(message, id, dest) {
|
||||||
{
|
var response = {
|
||||||
var response =
|
|
||||||
{
|
|
||||||
message: message,
|
message: message,
|
||||||
/** Timeout to auto-clean old responses */
|
/** Timeout to auto-clean old responses */
|
||||||
timeout: setTimeout(function()
|
timeout: setTimeout(function () {
|
||||||
{
|
responses.remove(id, dest);
|
||||||
responses.remove(id, dest);
|
},
|
||||||
},
|
response_timeout)
|
||||||
response_timeout)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
responses.set(response, id, dest);
|
responses.set(response, id, dest);
|
||||||
|
@ -305,13 +288,11 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
/**
|
/**
|
||||||
* Store the response to ignore duplicated messages later
|
* Store the response to ignore duplicated messages later
|
||||||
*/
|
*/
|
||||||
function storeProcessedResponse(ack, from)
|
function storeProcessedResponse(ack, from) {
|
||||||
{
|
var timeout = setTimeout(function () {
|
||||||
var timeout = setTimeout(function()
|
processedResponses.remove(ack, from);
|
||||||
{
|
},
|
||||||
processedResponses.remove(ack, from);
|
duplicates_timeout);
|
||||||
},
|
|
||||||
duplicates_timeout);
|
|
||||||
|
|
||||||
processedResponses.set(timeout, ack, from);
|
processedResponses.set(timeout, ack, from);
|
||||||
};
|
};
|
||||||
|
@ -330,22 +311,18 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
* @param {Integer} id - identifier of the request
|
* @param {Integer} id - identifier of the request
|
||||||
* @param [from] - source of the notification
|
* @param [from] - source of the notification
|
||||||
*/
|
*/
|
||||||
function RpcRequest(method, params, id, from, transport)
|
function RpcRequest(method, params, id, from, transport) {
|
||||||
{
|
|
||||||
RpcNotification.call(this, method, params);
|
RpcNotification.call(this, method, params);
|
||||||
|
|
||||||
this.getTransport = function()
|
this.getTransport = function () {
|
||||||
{
|
|
||||||
return transport;
|
return transport;
|
||||||
}
|
}
|
||||||
this.setTransport = function(value)
|
this.setTransport = function (value) {
|
||||||
{
|
|
||||||
transport = unifyTransport(value);
|
transport = unifyTransport(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!defineProperty_IE8)
|
if (!defineProperty_IE8)
|
||||||
Object.defineProperty(this, 'transport',
|
Object.defineProperty(this, 'transport', {
|
||||||
{
|
|
||||||
get: this.getTransport.bind(this),
|
get: this.getTransport.bind(this),
|
||||||
set: this.setTransport.bind(this)
|
set: this.setTransport.bind(this)
|
||||||
})
|
})
|
||||||
|
@ -355,13 +332,11 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
/**
|
/**
|
||||||
* @constant {Boolean} duplicated
|
* @constant {Boolean} duplicated
|
||||||
*/
|
*/
|
||||||
if(!(transport || self.getTransport()))
|
if (!(transport || self.getTransport())) {
|
||||||
{
|
if (defineProperty_IE8)
|
||||||
if(defineProperty_IE8)
|
|
||||||
this.duplicated = Boolean(response)
|
this.duplicated = Boolean(response)
|
||||||
else
|
else
|
||||||
Object.defineProperty(this, 'duplicated',
|
Object.defineProperty(this, 'duplicated', {
|
||||||
{
|
|
||||||
value: Boolean(response)
|
value: Boolean(response)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -378,23 +353,18 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
*
|
*
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
*/
|
*/
|
||||||
this.reply = function(error, result, transport)
|
this.reply = function (error, result, transport) {
|
||||||
{
|
|
||||||
// Fix optional parameters
|
// Fix optional parameters
|
||||||
if(error instanceof Function || error && error.send instanceof Function)
|
if (error instanceof Function || error && error.send instanceof Function) {
|
||||||
{
|
if (result != undefined)
|
||||||
if(result != undefined)
|
|
||||||
throw new SyntaxError("There can't be parameters after callback");
|
throw new SyntaxError("There can't be parameters after callback");
|
||||||
|
|
||||||
transport = error;
|
transport = error;
|
||||||
result = null;
|
result = null;
|
||||||
error = undefined;
|
error = undefined;
|
||||||
}
|
} else if (result instanceof Function ||
|
||||||
|
result && result.send instanceof Function) {
|
||||||
else if(result instanceof Function
|
if (transport != undefined)
|
||||||
|| result && result.send instanceof Function)
|
|
||||||
{
|
|
||||||
if(transport != undefined)
|
|
||||||
throw new SyntaxError("There can't be parameters after callback");
|
throw new SyntaxError("There can't be parameters after callback");
|
||||||
|
|
||||||
transport = result;
|
transport = result;
|
||||||
|
@ -404,57 +374,48 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
transport = unifyTransport(transport);
|
transport = unifyTransport(transport);
|
||||||
|
|
||||||
// Duplicated request, remove old response timeout
|
// Duplicated request, remove old response timeout
|
||||||
if(response)
|
if (response)
|
||||||
clearTimeout(response.timeout);
|
clearTimeout(response.timeout);
|
||||||
|
|
||||||
if(from != undefined)
|
if (from != undefined) {
|
||||||
{
|
if (error)
|
||||||
if(error)
|
|
||||||
error.dest = from;
|
error.dest = from;
|
||||||
|
|
||||||
if(result)
|
if (result)
|
||||||
result.dest = from;
|
result.dest = from;
|
||||||
};
|
};
|
||||||
|
|
||||||
var message;
|
var message;
|
||||||
|
|
||||||
// New request or overriden one, create new response with provided data
|
// New request or overriden one, create new response with provided data
|
||||||
if(error || result != undefined)
|
if (error || result != undefined) {
|
||||||
{
|
if (self.peerID != undefined) {
|
||||||
if(self.peerID != undefined)
|
if (error)
|
||||||
{
|
|
||||||
if(error)
|
|
||||||
error.from = self.peerID;
|
error.from = self.peerID;
|
||||||
else
|
else
|
||||||
result.from = self.peerID;
|
result.from = self.peerID;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Protocol indicates that responses has own request methods
|
// Protocol indicates that responses has own request methods
|
||||||
if(responseMethod)
|
if (responseMethod) {
|
||||||
{
|
if (responseMethod.error == undefined && error)
|
||||||
if(responseMethod.error == undefined && error)
|
message = {
|
||||||
message =
|
|
||||||
{
|
|
||||||
error: error
|
error: error
|
||||||
};
|
};
|
||||||
|
|
||||||
else
|
else {
|
||||||
{
|
var method = error ?
|
||||||
var method = error
|
responseMethod.error :
|
||||||
? responseMethod.error
|
responseMethod.response;
|
||||||
: responseMethod.response;
|
|
||||||
|
|
||||||
message =
|
message = {
|
||||||
{
|
|
||||||
method: method,
|
method: method,
|
||||||
params: error || result
|
params: error || result
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
} else
|
||||||
else
|
message = {
|
||||||
message =
|
error: error,
|
||||||
{
|
|
||||||
error: error,
|
|
||||||
result: result
|
result: result
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -462,12 +423,14 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Duplicate & not-overriden request, re-send old response
|
// Duplicate & not-overriden request, re-send old response
|
||||||
else if(response)
|
else if (response)
|
||||||
message = response.message;
|
message = response.message;
|
||||||
|
|
||||||
// New empty reply, response null value
|
// New empty reply, response null value
|
||||||
else
|
else
|
||||||
message = packer.pack({result: null}, id);
|
message = packer.pack({
|
||||||
|
result: null
|
||||||
|
}, id);
|
||||||
|
|
||||||
// Store the response to prevent to process a duplicated request later
|
// Store the response to prevent to process a duplicated request later
|
||||||
storeResponse(message, id, from);
|
storeResponse(message, id, from);
|
||||||
|
@ -475,7 +438,7 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
// Return the stored response so it can be directly send back
|
// Return the stored response so it can be directly send back
|
||||||
transport = transport || this.getTransport() || self.getTransport();
|
transport = transport || this.getTransport() || self.getTransport();
|
||||||
|
|
||||||
if(transport)
|
if (transport)
|
||||||
return transport.send(message);
|
return transport.send(message);
|
||||||
|
|
||||||
return message;
|
return message;
|
||||||
|
@ -484,15 +447,14 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
inherits(RpcRequest, RpcNotification);
|
inherits(RpcRequest, RpcNotification);
|
||||||
|
|
||||||
|
|
||||||
function cancel(message)
|
function cancel(message) {
|
||||||
{
|
|
||||||
var key = message2Key[message];
|
var key = message2Key[message];
|
||||||
if(!key) return;
|
if (!key) return;
|
||||||
|
|
||||||
delete message2Key[message];
|
delete message2Key[message];
|
||||||
|
|
||||||
var request = requests.pop(key.id, key.dest);
|
var request = requests.pop(key.id, key.dest);
|
||||||
if(!request) return;
|
if (!request) return;
|
||||||
|
|
||||||
clearTimeout(request.timeout);
|
clearTimeout(request.timeout);
|
||||||
|
|
||||||
|
@ -505,20 +467,18 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
*
|
*
|
||||||
* If `message` is not given, cancel all the request
|
* If `message` is not given, cancel all the request
|
||||||
*/
|
*/
|
||||||
this.cancel = function(message)
|
this.cancel = function (message) {
|
||||||
{
|
if (message) return cancel(message);
|
||||||
if(message) return cancel(message);
|
|
||||||
|
|
||||||
for(var message in message2Key)
|
for (var message in message2Key)
|
||||||
cancel(message);
|
cancel(message);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
this.close = function()
|
this.close = function () {
|
||||||
{
|
|
||||||
// Prevent to receive new messages
|
// Prevent to receive new messages
|
||||||
var transport = this.getTransport();
|
var transport = this.getTransport();
|
||||||
if(transport && transport.close)
|
if (transport && transport.close)
|
||||||
transport.close(4003, "Cancel request");
|
transport.close(4003, "Cancel request");
|
||||||
|
|
||||||
// Request & processed responses
|
// Request & processed responses
|
||||||
|
@ -527,8 +487,7 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
processedResponses.forEach(clearTimeout);
|
processedResponses.forEach(clearTimeout);
|
||||||
|
|
||||||
// Responses
|
// Responses
|
||||||
responses.forEach(function(response)
|
responses.forEach(function (response) {
|
||||||
{
|
|
||||||
clearTimeout(response.timeout);
|
clearTimeout(response.timeout);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -546,102 +505,89 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
*
|
*
|
||||||
* @returns {string} A raw JsonRPC 2.0 request or notification string
|
* @returns {string} A raw JsonRPC 2.0 request or notification string
|
||||||
*/
|
*/
|
||||||
this.encode = function(method, params, dest, transport, callback)
|
this.encode = function (method, params, dest, transport, callback) {
|
||||||
{
|
|
||||||
// Fix optional parameters
|
// Fix optional parameters
|
||||||
if(params instanceof Function)
|
if (params instanceof Function) {
|
||||||
{
|
if (dest != undefined)
|
||||||
if(dest != undefined)
|
|
||||||
throw new SyntaxError("There can't be parameters after callback");
|
throw new SyntaxError("There can't be parameters after callback");
|
||||||
|
|
||||||
callback = params;
|
callback = params;
|
||||||
transport = undefined;
|
transport = undefined;
|
||||||
dest = undefined;
|
dest = undefined;
|
||||||
params = undefined;
|
params = undefined;
|
||||||
}
|
} else if (dest instanceof Function) {
|
||||||
|
if (transport != undefined)
|
||||||
else if(dest instanceof Function)
|
|
||||||
{
|
|
||||||
if(transport != undefined)
|
|
||||||
throw new SyntaxError("There can't be parameters after callback");
|
throw new SyntaxError("There can't be parameters after callback");
|
||||||
|
|
||||||
callback = dest;
|
callback = dest;
|
||||||
transport = undefined;
|
transport = undefined;
|
||||||
dest = undefined;
|
dest = undefined;
|
||||||
}
|
} else if (transport instanceof Function) {
|
||||||
|
if (callback != undefined)
|
||||||
else if(transport instanceof Function)
|
|
||||||
{
|
|
||||||
if(callback != undefined)
|
|
||||||
throw new SyntaxError("There can't be parameters after callback");
|
throw new SyntaxError("There can't be parameters after callback");
|
||||||
|
|
||||||
callback = transport;
|
callback = transport;
|
||||||
transport = undefined;
|
transport = undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
if(self.peerID != undefined)
|
if (self.peerID != undefined) {
|
||||||
{
|
|
||||||
params = params || {};
|
params = params || {};
|
||||||
|
|
||||||
params.from = self.peerID;
|
params.from = self.peerID;
|
||||||
};
|
};
|
||||||
|
|
||||||
if(dest != undefined)
|
if (dest != undefined) {
|
||||||
{
|
|
||||||
params = params || {};
|
params = params || {};
|
||||||
|
|
||||||
params.dest = dest;
|
params.dest = dest;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Encode message
|
// Encode message
|
||||||
var message =
|
var message = {
|
||||||
{
|
|
||||||
method: method,
|
method: method,
|
||||||
params: params
|
params: params
|
||||||
};
|
};
|
||||||
|
|
||||||
if(callback)
|
if (callback) {
|
||||||
{
|
|
||||||
var id = requestID++;
|
var id = requestID++;
|
||||||
var retried = 0;
|
var retried = 0;
|
||||||
|
|
||||||
message = packer.pack(message, id);
|
message = packer.pack(message, id);
|
||||||
|
|
||||||
function dispatchCallback(error, result)
|
function dispatchCallback(error, result) {
|
||||||
{
|
|
||||||
self.cancel(message);
|
self.cancel(message);
|
||||||
|
|
||||||
callback(error, result);
|
callback(error, result);
|
||||||
};
|
};
|
||||||
|
|
||||||
var request =
|
var request = {
|
||||||
{
|
message: message,
|
||||||
message: message,
|
callback: dispatchCallback,
|
||||||
callback: dispatchCallback,
|
|
||||||
responseMethods: responseMethods[method] || {}
|
responseMethods: responseMethods[method] || {}
|
||||||
};
|
};
|
||||||
|
|
||||||
var encode_transport = unifyTransport(transport);
|
var encode_transport = unifyTransport(transport);
|
||||||
|
|
||||||
function sendRequest(transport)
|
function sendRequest(transport) {
|
||||||
{
|
|
||||||
var rt = (method === 'ping' ? ping_request_timeout : request_timeout);
|
var rt = (method === 'ping' ? ping_request_timeout : request_timeout);
|
||||||
request.timeout = setTimeout(timeout, rt*Math.pow(2, retried++));
|
request.timeout = setTimeout(timeout, rt * Math.pow(2, retried++));
|
||||||
message2Key[message] = {id: id, dest: dest};
|
message2Key[message] = {
|
||||||
|
id: id,
|
||||||
|
dest: dest
|
||||||
|
};
|
||||||
requests.set(request, id, dest);
|
requests.set(request, id, dest);
|
||||||
|
|
||||||
transport = transport || encode_transport || self.getTransport();
|
transport = transport || encode_transport || self.getTransport();
|
||||||
if(transport)
|
if (transport)
|
||||||
return transport.send(message);
|
return transport.send(message);
|
||||||
|
|
||||||
return message;
|
return message;
|
||||||
};
|
};
|
||||||
|
|
||||||
function retry(transport)
|
function retry(transport) {
|
||||||
{
|
|
||||||
transport = unifyTransport(transport);
|
transport = unifyTransport(transport);
|
||||||
|
|
||||||
console.warn(retried+' retry for request message:',message);
|
console.warn(retried + ' retry for request message:', message);
|
||||||
|
|
||||||
var timeout = processedResponses.pop(id, dest);
|
var timeout = processedResponses.pop(id, dest);
|
||||||
clearTimeout(timeout);
|
clearTimeout(timeout);
|
||||||
|
@ -649,13 +595,12 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
return sendRequest(transport);
|
return sendRequest(transport);
|
||||||
};
|
};
|
||||||
|
|
||||||
function timeout()
|
function timeout() {
|
||||||
{
|
if (retried < max_retries)
|
||||||
if(retried < max_retries)
|
|
||||||
return retry(transport);
|
return retry(transport);
|
||||||
|
|
||||||
var error = new Error('Request has timed out');
|
var error = new Error('Request has timed out');
|
||||||
error.request = message;
|
error.request = message;
|
||||||
|
|
||||||
error.retry = retry;
|
error.retry = retry;
|
||||||
|
|
||||||
|
@ -669,7 +614,7 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
message = packer.pack(message);
|
message = packer.pack(message);
|
||||||
|
|
||||||
transport = transport || this.getTransport();
|
transport = transport || this.getTransport();
|
||||||
if(transport)
|
if (transport)
|
||||||
return transport.send(message);
|
return transport.send(message);
|
||||||
|
|
||||||
return message;
|
return message;
|
||||||
|
@ -686,23 +631,19 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
*
|
*
|
||||||
* @throws {TypeError} - Message is not defined
|
* @throws {TypeError} - Message is not defined
|
||||||
*/
|
*/
|
||||||
this.decode = function(message, transport)
|
this.decode = function (message, transport) {
|
||||||
{
|
if (!message)
|
||||||
if(!message)
|
|
||||||
throw new TypeError("Message is not defined");
|
throw new TypeError("Message is not defined");
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
message = packer.unpack(message);
|
message = packer.unpack(message);
|
||||||
}
|
} catch (e) {
|
||||||
catch(e)
|
|
||||||
{
|
|
||||||
// Ignore invalid messages
|
// Ignore invalid messages
|
||||||
return console.debug(e, message);
|
return console.debug(e, message);
|
||||||
};
|
};
|
||||||
|
|
||||||
var id = message.id;
|
var id = message.id;
|
||||||
var ack = message.ack;
|
var ack = message.ack;
|
||||||
var method = message.method;
|
var method = message.method;
|
||||||
var params = message.params || {};
|
var params = message.params || {};
|
||||||
|
|
||||||
|
@ -710,43 +651,38 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
var dest = params.dest;
|
var dest = params.dest;
|
||||||
|
|
||||||
// Ignore messages send by us
|
// Ignore messages send by us
|
||||||
if(self.peerID != undefined && from == self.peerID) return;
|
if (self.peerID != undefined && from == self.peerID) return;
|
||||||
|
|
||||||
// Notification
|
// Notification
|
||||||
if(id == undefined && ack == undefined)
|
if (id == undefined && ack == undefined) {
|
||||||
{
|
|
||||||
var notification = new RpcNotification(method, params);
|
var notification = new RpcNotification(method, params);
|
||||||
|
|
||||||
if(self.emit('request', notification)) return;
|
if (self.emit('request', notification)) return;
|
||||||
return notification;
|
return notification;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function processRequest()
|
function processRequest() {
|
||||||
{
|
|
||||||
// If we have a transport and it's a duplicated request, reply inmediatly
|
// If we have a transport and it's a duplicated request, reply inmediatly
|
||||||
transport = unifyTransport(transport) || self.getTransport();
|
transport = unifyTransport(transport) || self.getTransport();
|
||||||
if(transport)
|
if (transport) {
|
||||||
{
|
|
||||||
var response = responses.get(id, from);
|
var response = responses.get(id, from);
|
||||||
if(response)
|
if (response)
|
||||||
return transport.send(response.message);
|
return transport.send(response.message);
|
||||||
};
|
};
|
||||||
|
|
||||||
var idAck = (id != undefined) ? id : ack;
|
var idAck = (id != undefined) ? id : ack;
|
||||||
var request = new RpcRequest(method, params, idAck, from, transport);
|
var request = new RpcRequest(method, params, idAck, from, transport);
|
||||||
|
|
||||||
if(self.emit('request', request)) return;
|
if (self.emit('request', request)) return;
|
||||||
return request;
|
return request;
|
||||||
};
|
};
|
||||||
|
|
||||||
function processResponse(request, error, result)
|
function processResponse(request, error, result) {
|
||||||
{
|
|
||||||
request.callback(error, result);
|
request.callback(error, result);
|
||||||
};
|
};
|
||||||
|
|
||||||
function duplicatedResponse(timeout)
|
function duplicatedResponse(timeout) {
|
||||||
{
|
|
||||||
console.warn("Response already processed", message);
|
console.warn("Response already processed", message);
|
||||||
|
|
||||||
// Update duplicated responses timeout
|
// Update duplicated responses timeout
|
||||||
|
@ -756,27 +692,24 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
|
|
||||||
|
|
||||||
// Request, or response with own method
|
// Request, or response with own method
|
||||||
if(method)
|
if (method) {
|
||||||
{
|
|
||||||
// Check if it's a response with own method
|
// Check if it's a response with own method
|
||||||
if(dest == undefined || dest == self.peerID)
|
if (dest == undefined || dest == self.peerID) {
|
||||||
{
|
|
||||||
var request = requests.get(ack, from);
|
var request = requests.get(ack, from);
|
||||||
if(request)
|
if (request) {
|
||||||
{
|
|
||||||
var responseMethods = request.responseMethods;
|
var responseMethods = request.responseMethods;
|
||||||
|
|
||||||
if(method == responseMethods.error)
|
if (method == responseMethods.error)
|
||||||
return processResponse(request, params);
|
return processResponse(request, params);
|
||||||
|
|
||||||
if(method == responseMethods.response)
|
if (method == responseMethods.response)
|
||||||
return processResponse(request, null, params);
|
return processResponse(request, null, params);
|
||||||
|
|
||||||
return processRequest();
|
return processRequest();
|
||||||
}
|
}
|
||||||
|
|
||||||
var processed = processedResponses.get(ack, from);
|
var processed = processedResponses.get(ack, from);
|
||||||
if(processed)
|
if (processed)
|
||||||
return duplicatedResponse(processed);
|
return duplicatedResponse(processed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -784,19 +717,18 @@ function RpcBuilder(packer, options, transport, onRequest)
|
||||||
return processRequest();
|
return processRequest();
|
||||||
};
|
};
|
||||||
|
|
||||||
var error = message.error;
|
var error = message.error;
|
||||||
var result = message.result;
|
var result = message.result;
|
||||||
|
|
||||||
// Ignore responses not send to us
|
// Ignore responses not send to us
|
||||||
if(error && error.dest && error.dest != self.peerID) return;
|
if (error && error.dest && error.dest != self.peerID) return;
|
||||||
if(result && result.dest && result.dest != self.peerID) return;
|
if (result && result.dest && result.dest != self.peerID) return;
|
||||||
|
|
||||||
// Response
|
// Response
|
||||||
var request = requests.get(ack, from);
|
var request = requests.get(ack, from);
|
||||||
if(!request)
|
if (!request) {
|
||||||
{
|
|
||||||
var processed = processedResponses.get(ack, from);
|
var processed = processedResponses.get(ack, from);
|
||||||
if(processed)
|
if (processed)
|
||||||
return duplicatedResponse(processed);
|
return duplicatedResponse(processed);
|
||||||
|
|
||||||
return console.warn("No callback was defined for this message", message);
|
return console.warn("No callback was defined for this message", message);
|
||||||
|
@ -819,4 +751,4 @@ var transports = require('./clients/transports');
|
||||||
|
|
||||||
RpcBuilder.clients = clients;
|
RpcBuilder.clients = clients;
|
||||||
RpcBuilder.clients.transports = transports;
|
RpcBuilder.clients.transports = transports;
|
||||||
RpcBuilder.packers = packers;
|
RpcBuilder.packers = packers;
|
|
@ -10,37 +10,31 @@
|
||||||
*
|
*
|
||||||
* @return {String} - the stringified JsonRPC 2.0 message
|
* @return {String} - the stringified JsonRPC 2.0 message
|
||||||
*/
|
*/
|
||||||
function pack(message, id)
|
function pack(message, id) {
|
||||||
{
|
var result = {
|
||||||
var result =
|
|
||||||
{
|
|
||||||
jsonrpc: "2.0"
|
jsonrpc: "2.0"
|
||||||
};
|
};
|
||||||
|
|
||||||
// Request
|
// Request
|
||||||
if(message.method)
|
if (message.method) {
|
||||||
{
|
|
||||||
result.method = message.method;
|
result.method = message.method;
|
||||||
|
|
||||||
if(message.params)
|
if (message.params)
|
||||||
result.params = message.params;
|
result.params = message.params;
|
||||||
|
|
||||||
// Request is a notification
|
// Request is a notification
|
||||||
if(id != undefined)
|
if (id != undefined)
|
||||||
result.id = id;
|
result.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Response
|
// Response
|
||||||
else if(id != undefined)
|
else if (id != undefined) {
|
||||||
{
|
if (message.error) {
|
||||||
if(message.error)
|
if (message.result !== undefined)
|
||||||
{
|
|
||||||
if(message.result !== undefined)
|
|
||||||
throw new TypeError("Both result and error are defined");
|
throw new TypeError("Both result and error are defined");
|
||||||
|
|
||||||
result.error = message.error;
|
result.error = message.error;
|
||||||
}
|
} else if (message.result !== undefined)
|
||||||
else if(message.result !== undefined)
|
|
||||||
result.result = message.result;
|
result.result = message.result;
|
||||||
else
|
else
|
||||||
throw new TypeError("No result or error is defined");
|
throw new TypeError("No result or error is defined");
|
||||||
|
@ -60,35 +54,33 @@ function pack(message, id)
|
||||||
*
|
*
|
||||||
* @return {Object} - object filled with the JsonRPC 2.0 message content
|
* @return {Object} - object filled with the JsonRPC 2.0 message content
|
||||||
*/
|
*/
|
||||||
function unpack(message)
|
function unpack(message) {
|
||||||
{
|
|
||||||
var result = message;
|
var result = message;
|
||||||
|
|
||||||
if(typeof message === 'string' || message instanceof String) {
|
if (typeof message === 'string' || message instanceof String) {
|
||||||
result = JSON.parse(message);
|
result = JSON.parse(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if it's a valid message
|
// Check if it's a valid message
|
||||||
|
|
||||||
var version = result.jsonrpc;
|
var version = result.jsonrpc;
|
||||||
if(version !== '2.0')
|
if (version !== '2.0')
|
||||||
throw new TypeError("Invalid JsonRPC version '" + version + "': " + message);
|
throw new TypeError("Invalid JsonRPC version '" + version + "': " + message);
|
||||||
|
|
||||||
// Response
|
// Response
|
||||||
if(result.method == undefined)
|
if (result.method == undefined) {
|
||||||
{
|
if (result.id == undefined)
|
||||||
if(result.id == undefined)
|
throw new TypeError("Invalid message: " + message);
|
||||||
throw new TypeError("Invalid message: "+message);
|
|
||||||
|
|
||||||
var result_defined = result.result !== undefined;
|
var result_defined = result.result !== undefined;
|
||||||
var error_defined = result.error !== undefined;
|
var error_defined = result.error !== undefined;
|
||||||
|
|
||||||
// Check only result or error is defined, not both or none
|
// Check only result or error is defined, not both or none
|
||||||
if(result_defined && error_defined)
|
if (result_defined && error_defined)
|
||||||
throw new TypeError("Both result and error are defined: "+message);
|
throw new TypeError("Both result and error are defined: " + message);
|
||||||
|
|
||||||
if(!result_defined && !error_defined)
|
if (!result_defined && !error_defined)
|
||||||
throw new TypeError("No result or error is defined: "+message);
|
throw new TypeError("No result or error is defined: " + message);
|
||||||
|
|
||||||
result.ack = result.id;
|
result.ack = result.id;
|
||||||
delete result.id;
|
delete result.id;
|
||||||
|
@ -99,5 +91,5 @@ function unpack(message)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
exports.pack = pack;
|
exports.pack = pack;
|
||||||
exports.unpack = unpack;
|
exports.unpack = unpack;
|
|
@ -1,13 +1,10 @@
|
||||||
function pack(message)
|
function pack(message) {
|
||||||
{
|
|
||||||
throw new TypeError("Not yet implemented");
|
throw new TypeError("Not yet implemented");
|
||||||
};
|
};
|
||||||
|
|
||||||
function unpack(message)
|
function unpack(message) {
|
||||||
{
|
|
||||||
throw new TypeError("Not yet implemented");
|
throw new TypeError("Not yet implemented");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.pack = pack;
|
||||||
exports.pack = pack;
|
exports.unpack = unpack;
|
||||||
exports.unpack = unpack;
|
|
|
@ -1,6 +1,6 @@
|
||||||
var JsonRPC = require('./JsonRPC');
|
var JsonRPC = require('./JsonRPC');
|
||||||
var XmlRPC = require('./XmlRPC');
|
var XmlRPC = require('./XmlRPC');
|
||||||
|
|
||||||
|
|
||||||
exports.JsonRPC = JsonRPC;
|
exports.JsonRPC = JsonRPC;
|
||||||
exports.XmlRPC = XmlRPC;
|
exports.XmlRPC = XmlRPC;
|
Loading…
Reference in New Issue