i8xscore
Version:
i8xiaoshi base socket communication,last update at 151021
140 lines (139 loc) • 6.91 kB
JavaScript
/**
* 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);
}