i8xscore
Version:
i8xiaoshi base socket communication,last update at 151021
128 lines (127 loc) • 6.16 kB
JavaScript
var socketClient=require('./base-socket.js');
var ucache=require('./cache');
var _=require('underscore');
var serviceConfig=global.serverConfig;
var log4js=require('./log');
var mainHostIp = serviceConfig.remoteIp;
var mainHostPort = serviceConfig.serPorts['CPEC.Center.Service'];
var freeWFHostPort=serviceConfig.appService.freeTMP;
var financeHostPort=serviceConfig.appService.finance;
var webIMHostPort=serviceConfig.appService.webIM;
var matterMachinPort=serviceConfig.appService.MatterMachin;
var _baseThen=function(cont,arg){
var sType=arg.serverType;
var command=arg.command||'';
var data=arg.data||{};
var nodeKey=arg.nodeKey;//||"default"
command=command+JSON.stringify(data);
var requestHost=function(srvData){
var rqeSrv=srvData[sType];
if(rqeSrv) {
var config = {
port: rqeSrv.split(':')[1] || '127.0.0.1',
host: rqeSrv.split(':')[0] || '0',
command: command
};
var cnt = new socketClient.getRemoteData(config);
cnt.connecting();
cnt.on("receiveData", function (data) {
cont(null, data);
if (!data.Result) {
log4js.logger.warn('[result.False] 返回结果值失败![请求接口:host(' + config.host + ':' + config.port + '),cmd(' + config.command + ')];response:'+JSON.stringify(data));
}
});
cnt.on("receiveEnd", function (data) {
//console.log('logo!');
});
cnt.on("error", function (err) {
cont(null, data);
log4js.logger.error('[remote.Request.Error]远程请求出错!错误err:'+err + '[请求接口:host(' + config.host + ':' + config.port + '),cmd(' + config.command + ')]');
//console.log(data);
});
}else{
log4js.logger.error('[remote.Address.None]未找到服务地址,[请求接口:cmd(' + command + ')]');
cont(null,{Result:false,Code:53,Description:"未找到服务地址",ReturnObject:{Description:"未找到服务地址"}});
}
}
//若缓存不存在,则刷新或更新缓存//subdomain+".serverInfo"
if(sType=="CenterAddress") {
requestHost({"CenterAddress": mainHostIp + ":" + mainHostPort});
}else if(sType=="FinanceAddress"){
requestHost({"FinanceAddress": financeHostPort});
}else if(sType=="MatterMachin"){
requestHost({"MatterMachin": matterMachinPort});
}else if(nodeKey=="freeTMP"){
requestHost({"WorkflowAddress":freeWFHostPort});
}else if(sType=="WebIMAddress"){
requestHost({"WebIMAddress":webIMHostPort});
}else {
if(nodeKey.length==0||nodeKey==undefined||nodeKey=='underfined'||nodeKey.length>15){
log4js.logger.error('[nodekey.Error]nodeKey有误,请排查![command:' + command + ';data:' + JSON.stringify(data) + ';nodeKey:' + nodeKey + ')]');
cont(null,{Code: 8892, ReturnObject: null, Description: 'nodeKey有误,请排查!'});
}else {
ucache.hGetCache("node", nodeKey, function (resp) {
if (resp.result && !_.isEmpty(resp.data)) {
requestHost(resp.data);
} else {
var mainReq = new socketClient.getRemoteData({port: mainHostPort, host: mainHostIp, command: 'CPEC.Center.Service.Common.NodeService.GetAllNode{}'});
mainReq.connecting();
mainReq.on("receiveData", function (data) {
if (data.Result) {
var cData = data.ReturnObject[0];
var newCPMInfo = _.isObject(cData) ? cData : JSON.parse(cData);
if (newCPMInfo) {
if (!_.isEmpty(newCPMInfo)) {
log4js.logger.debug('[set.node.firstly]写入日志!参数[arg(' + JSON.stringify(arg) + ')]');
ucache.hsetCache("node", arg.nodeKey, newCPMInfo);//添加或更新缓存,以二级域名作为KEY,帐套服务地址作为VALUE,缓存起来
}
requestHost(newCPMInfo);
}
} else {
log4js.logger.warn('[get.Nodes.Failed]帐套数据不存在![host(' + mainHostIp + ':' + mainHostPort + '),cmd(CPEC.Center.Service.Common.NodeService.GetAllNode{})]' + data.Description);
}
});
mainReq.on("error", function (err) {
log4js.logger.error(err);
})
}
})
}
}
}
exports.getWorkflowServiceByThen=function(cont,setting){
setting.serverType="WorkflowAddress";
return _baseThen(cont,setting);
};
exports.getPlatformServiceByThen=function(cont,setting){
setting.serverType="PlatformAddress";
return _baseThen(cont,setting);
};
exports.getCenterServiceByThen=function(cont,setting){
setting.serverType="CenterAddress";
return _baseThen(cont,setting);
};
exports.getAppsServiceByThen=function(cont,setting){
setting.serverType="AppsAddress";
return _baseThen(cont,setting);
};
exports.getStoreServiceByThen=function(cont,setting){
setting.serverType="PlatformAddress";//storeService已与platform合并了
return _baseThen(cont,setting);
};
exports.getSearchServiceByThen=function(cont,setting){
setting.serverType="SearchAddress";
return _baseThen(cont,setting);
};
exports.getFinanceServiceByThen=function(cont,setting){
setting.serverType="FinanceAddress";
return _baseThen(cont,setting);
};
exports.getWebIMServiceByThen=function(cont,setting){
setting.serverType="WebIMAddress";
return _baseThen(cont,setting);
};
exports.getMachineServiceByThen=function(cont,setting){
setting.serverType="MatterMachin";
return _baseThen(cont,setting);
};