UNPKG

latte_web3

Version:
113 lines (108 loc) 3.12 kB
(function(define) {'use strict' define("latte_web/server/rpc/master", ["require", "exports", "module", "window"], function(require, exports, module, window) { var latte_lib = require("latte_lib") ,ORPC = require("./orpc") , Path = require("path"); var defaultConfig = {}; (function() { this.log = 0; }).call(defaultConfig); var RPC = function(config) { this.config = latte_lib.merger(defaultConfig, config); this.workers = []; ORPC.call(this, config); var self = this; this.on("masterRpcLoadError", function(err) { if(self.config.log) { var filename = "./logs/webMasterRpcLoadError/"+latte_lib.format.dateFormat()+".log"; latte_lib.fs.writeFile(filename, latte_lib.getErrorString(err)); }else{ throw err; } }); this.on("masterError", function(err) { if(self.config.log) { var filename = "./logs/masterError/"+latte_lib.format.dateFormat()+".log"; latte_lib.fs.writeFile(filename, latte_lib.getErrorString(err)); }else{ throw err; } }); this.on("error", function(e) { self.emit("masterError", e); }); this.reload(); }; latte_lib.inherits(RPC, ORPC); (function() { this.loadFile = function(path) { var self = this; var o ; try { o = self.rpcRequire.require("./"+path); }catch(err) { if(self.config.log) { var filename = "./logs/loadWebRpc/"+latte_lib.format.dateFormat()+".log"; latte_lib.fs.writeFile(filename, latte_lib.getErrorString(err)); }else{ throw err; } return ; } if(o.master) { self.Set(o.method, o.master); } } this.removeWorker = function(worker) { var self = this; var index = self.workers.indexOf(worker); if(index != -1) { latte_lib.removeLocalArray(self.workers, index); } } this.addWorker = function(worker) { ORPC.prototype.addWorker.call(this, worker); this.workers.push(worker); } this.CallAll = function(method, params, socket, cb) { var self = this; if(latte_lib.isFunction(socket)) { cb = socket; socket = null;} if(cb) { var funcs = this.workers.map(function(worker) { return function(callback) { self.Call(worker, method, params, socket, function(error, data, socket) { callback(null, { error: error, data: data, worker: worker }); }); } }); latte_lib.async.parallel(funcs, function(err,all) { cb(err, all); }); }else{ this.workers.forEach(function(worker) { self.Call(worker, method, params, socket); }); } } this.Call = function(worker, method, params, socket, cb) { var id = ++this.id; if(latte_lib.isFunction(socket)) { cb = socket; socket = null; } worker.send({ method: method, params: params, id: id },socket); cb && this.once(id, cb); } }).call(RPC.prototype); module.exports = RPC; }); })(typeof define === "function"? define: function(name, reqs, factory) {factory(require, exports, module); });