latte_web3
Version:
113 lines (108 loc) • 3.12 kB
JavaScript
(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); });