UNPKG

i8xscore

Version:

i8xiaoshi base socket communication,last update at 151021

128 lines (127 loc) 6.16 kB
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); };