UNPKG

i8xscore

Version:

i8xiaoshi base socket communication,last update at 151021

140 lines (139 loc) 6.91 kB
/** * Created by kusion on 2014/10/23. */ var socketClient=require('./base-socket.js'); var serviceConfig=global.serverConfig; var ucache=require('./cache'); var _=require('underscore'); 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; function getSocketData(_setting){ this.command=_setting.command||''; this.data=_setting.data||{}; this.serverType=_setting.serverType||''; this.success=_setting.success; this.error=_setting.error; this.receiveEnd=_setting.receiveEnd; this.nodeKey=_setting.nodeKey;//||"default"; } getSocketData.prototype.init=function(){ var _this=this; if(this.serverType=="CenterAddress"){//如果请求为CENTER类型,则直接通过配制文件读取服务器地址,并发起说请求 this.startReq({"CenterAddress":mainHostIp+":"+mainHostPort}); }else if(this.serverType == "FinanceAddress"){ this.startReq({"FinanceAddress":financeHostPort}); }else if(this.serverType == "MatterMachin"){ this.startReq({"MatterMachin": matterMachinPort}); }else if(this.nodeKey == "freeTMP"){ this.startReq({"WorkflowAddress":freeWFHostPort}); }else if(this.serverType == "WebIMAddress"){ this.startReq({"WebIMAddress":webIMHostPort}); }else { if(this.nodeKey.length==0||this.nodeKey==undefined||this.nodeKey=='underfined'||this.nodeKey.length>15){ log4js.logger.error('[nodekey.Error]nodeKey有误,请排查![command:' + this.command + ';data:' + JSON.stringify(this.data) + ';nodeKey:' + this.nodeKey + ')]'); this.success({Code: 8892, ReturnObject: null, Description: 'nodeKey有误,请排查!'}); }else { ucache.hGetCache("node", this.nodeKey, function (resp) {//通过缓存取服务地址 if (resp.result && !_.isEmpty(resp.data)) { _this.startReq(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]写入日志![command:' + _this.command + ';data:' + JSON.stringify(_this.data) + ';nodeKey:' + _this.nodeKey + ')]'); ucache.hsetCache("node", _this.nodeKey, newCPMInfo);//添加或更新缓存,以二级域名作为KEY,帐套服务地址作为VALUE,缓存起来 } _this.startReq(newCPMInfo); } } else { if (_this.error) { _this.error({Code: 8891, ReturnObject: null, Description: '帐套数据获取出错!' + data.Description}); } log4js.logger.error("[get.Nodes.Failed]帐套数据不存在!CPEC.Center.Service.Common.NodeService.GetAllNode{};response:" + JSON.stringify(data)); } }); mainReq.on("error", function (err) { if (_this.error) { _this.error(err); } log4js.logger.error('[remote.Request.Error]远程请求出错! 错误err:' + err.message + ",CPEC.Center.Service.Common.NodeService.GetAllNode{}"); }) } }) } } } getSocketData.prototype.startReq=function(srvDataObj){ var rqeSrv=srvDataObj[this.serverType]; if(rqeSrv) { this.command = this.command + JSON.stringify(this.data);//合并command与data对象,作为socket数据指令 var _this = this; var cnt = new socketClient.getRemoteData({port: rqeSrv.split(':')[1] || '127.0.0.1', host: rqeSrv.split(':')[0] || '0', command: this.command}); cnt.connecting(); cnt.on("receiveData", function (data) { if (!data.Result) { log4js.logger.warn('[result.False] 返回结果值失败![请求接口:host(' + rqeSrv.split(':')[0] + ':' + rqeSrv.split(':')[1] + '),cmd(' + _this.command + ')];response:'+JSON.stringify(data)); } _this.success(data); }); cnt.on("receiveEnd", function () { if (_this.receiveEnd) { _this.receiveEnd(); } }); cnt.on("error", function (err) { if (_this.error) { _this.error(err); } log4js.logger.error('[remote.Request.Error]远程请求出错!错误err:'+err + '[请求接口:host(' + rqeSrv.split(':')[0] + ':' + rqeSrv.split(':')[1] + '),cmd(' + _this.command + ')]'); }) }else{ log4js.logger.error('[remote.Address.None]未找到服务地址,[请求接口:cmd(' + this.command + ')]'); this.success({Result:false,Code:53,Description:"未找到服务地址",ReturnObject:{Description:"未找到服务地址"}}); } } /* *服务调用分发 */ exports.getWorkflowService=function(setting){ setting.serverType="WorkflowAddress"; return new getSocketData(setting); }; exports.getPlatformService=function(setting){ setting.serverType="PlatformAddress"; return new getSocketData(setting); }; exports.getCenterService=function(setting){ setting.serverType="CenterAddress"; return new getSocketData(setting); }; exports.getAppsService=function(setting){ setting.serverType="AppsAddress"; return new getSocketData(setting); }; exports.getSearchService=function(setting){ setting.serverType="SearchAddress"; return new getSocketData(setting); } exports.getFinanceService=function(setting){ setting.serverType="FinanceAddress"; return new getSocketData(setting); }; exports.getWebIMService=function(setting){ setting.serverType="WebIMAddress"; return new getSocketData(setting); }; exports.getMachineService=function(setting){ setting.serverType = "MatterMachin"; return new getSocketData(setting); }