herald-server
Version:
Server for sending messages by publish-subscribe, and whisper.
117 lines (103 loc) • 5.26 kB
JavaScript
/*
* The MIT License (MIT)
*
* Copyright (c) 2015 (NumminorihSF) Konstantine Petryaev
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
;
/**
* Module that managed rpc.
* Модуль, управляющий удаленным вызовом процедур.
* @class HeraldServer.RPCWorker
* @alternateClassName RPCWorker
* @member HeraldServer
*/
/**
* Constructor.
* Конструктор.
* @method constructor
* @returns {RPCWorker} RPCWorker object.
* Объект RPCWorker.
*/
function RPCWorker(){
/**
* Object for route rpc.
* Объект для управления rpc.
* @type {{name: Function}}
*/
this.rpcFunction = {};
return this;
}
/**
* Function for remote calling. It is callback for {@link HeraldServer.RPCWorker#addRpcWorker HeraldServer.RPCWorker.addRpcWorker()} method.
* Функция для удаленного вызова. Передается как callback в метод {@link HeraldServer.RPCWorker#addRpcWorker HeraldServer.RPCWorker.addRpcWorker()}.
* @method remoteProcedure
* @member HeraldServer.RPCWorker
* @param {String} uid Uid of application that want to call this.
* Uid приложения, которое пытается вызвать данную функцию.
* @param {Object} args Arguments for call. Аргументы для вызова.
* @param {Function} callback Callback function to return result. First arg is Error object or null. Second response data if is.
* Функция для возврата результатов. Первый аргумент - объект ошибки или null. Второй - результат.
*/
/**
* Add function to work with rpc calls.
* Добавляет функцию для удаленного использования.
* @param {String} actionName Action name. Название действия.
* @param {Function} callback Function to call. {@link HeraldServer.RPCWorker#remoteProcedure Should be like this}.
* Вызываемая функция. {@link HeraldServer.RPCWorker#remoteProcedure Должна соответствовать этому шаблону}.
* @returns {Boolean} True if added. false if was function with such name.
* False means, that you should remove old rpc function with such actionName.
* True если добавленно. false если есть функция с таким именем.
* False означает, что Вам необходимо удалить старую функцию с таким названием действия.
*/
RPCWorker.prototype.addRpcWorker = function(actionName, callback){
if (this.rpcFunction[actionName]) return false;
this.rpcFunction[actionName] = callback;
return true;
};
/**
* Remove rpc function. Удаляет функцию из используемых.
* @param {String} actionName Action name. Название действия.
* @returns {Boolean} true if was such function. Else returns false.
* true если такая функция была. false, если нет.
*/
RPCWorker.prototype.removeRpcWorker = function(actionName){
var answer = actionName in this.rpcFunction;
delete this.rpcFunction[actionName];
return answer;
};
/**
* Call rpcWorker with name, arguments and callback.
* Вызывает функцию с соответсвующим именем, прокидывая аргументы и callback.
* @param {String} action Action name. Название действия.
* @param {Object} body Message body. Тело сообщения.
* @param {Object} body.args Arguments object for call function.
* Объект аргументов для вызова процедуры.
* @param {Function} callback
* @protected
* @returns {*}
*/
RPCWorker.prototype.do = function(action, body, callback){
if (!body || !body.args) return callback(new Error('WRONG_ARGS'));
if (!body || !body.uid) return callback(new Error('INTERNAL_SERVER_ERROR'));
if (!this.rpcFunction[action]) return callback(new Error('WRONG_ACTION'));
return this.rpcFunction[action](body.uid, body.args, callback);
};
module.exports = RPCWorker;