connection.js 5.85 KB
var env = process.env.NODE_ENV || 'development'; 
var cfg = require('../../config/config.js').get(env);
var stats = require('../helper/stats.js'); 
var request = require('request');
var messageSOAP = require('../helper/messageSOAP.js'); 

var connection = [];


connection.requestSoapToSPW = async function (soap,cmd,myMethod) {

    var params = {
        url               : cfg.service.SPW[myMethod+"_"+cmd+"_URL"],
        body              : messageSOAP.objectToSOAP(soap,cmd),
        method            : myMethod
    }

    return asyncRequest(params,cmd,cfg.service.SPW.Name);
};
connection.requestJsonToD01 = async function (obj,cmd,myMethod) {

    // JSON.stringify(json)
    var params = {
        url               : cfg.service.D01[myMethod+"_"+cmd+"_URL"],
        body              : obj,
        method            : myMethod
    }

    if(params.method == "GET")
    {
        var genUrl = getUrl(params);
        genUrl.push(genUrl[0].replace("8080","8081"));        
        if(genUrl.length > 1)
        {
            // console.log("multi Send");
            var multiSend = [];
            for(var i=0;i<genUrl.length;i++)
                multiSend.push({url:genUrl[i],method:params.method});
        
            var parallelRes = await parallelRequest(multiSend,cmd,cfg.service.D01.Name); 

            var dataRes = {};
            for(var i=0;i<multiSend.length;i++)
            {
                // console.log("start loop");
                var loopRes = parallelRes[i];
                
                if(loopRes.response)
                {
                    var data = JSON.parse(loopRes.response.body);
                    dataRes[i] = {};

                    if(!data.resultCode)
                        dataRes[i].err = "Miss resultCode";

                    if(!data.resultDescription)
                        dataRes[i].err = "Miss resultDescription"

                    
                    dataRes[i].data = data.resultData;
                   
                }

            }

            var result = {};
            result.response = {};
            result.response.resultData = [];

            for (var i = 0; i < multiSend.length; i++) {
                    
                result.response.resultData = result.response.resultData.concat(dataRes[i].data);
                if(dataRes[i].err)
                    result.err = dataRes[i].err;
            }

            if(!result.err)
            {
                result.response.resultCode = "20000";
                result.response.developerMessage = "Success";
            }

            
        }else
        {
            // console.log("single Send");
            params.url = genUrl[0];
            delete params.body;

            var result = await asyncRequest(params,cmd,cfg.service.D01.Name);

            // console.log(result);
            if(result.response)
            {
                var data = JSON.parse(result.response.body);
                result.response = data;

                if(!data.resultCode)
                    result.err = "Miss resultCode";

                if(!data.resultDescription)
                    result.err = "Miss resultDescription";
            }
        }

        
    }else if(params.method == "POST")
    {
        params.body = JSON.stringify(params.body);
    }

    
    delete result.body;
    // console.log(result);    
    return result;

    
};


async function parallelRequest(multiParams,cmd,node)
{
   
    var promises = [];

    for(var i=0;i<multiParams.length;i++)
        promises.push(asyncRequest (multiParams[i],cmd,node));

    var res = await Promise.all(promises);
    for(var i=0;i<res.length;i++)
    {
        if(!res[i].err)
            stats.reciveResponse(node,cmd,"Success");

    }


    return res;
}

function asyncRequest (params = {},cmd,node) {

    
    // console.log("Start : "+new Date().toISOString());
    return new Promise((resolve, reject) => {
        request(params, function (error, response, body) {

            stats.sendRequest(node,cmd);

            if (error) {
                
                stats.reciveResponse(node,cmd,"Error");
                resolve({
                    'body'  : body,
                    'err'   : error
                });
            } else {
               
                // stats.reciveResponse(node,cmd,"Success");
                resolve({
                    'body'      : body,
                    'response'  : response
                });
            }
        });
    });
};

function getUrl(params)
{
    var returnData = [];
    var url = params.url;
    var fields = "";
    var filter = "";

    // console.log(params.body);   
    if(params.body)
    {
        var first = true;
        for (key in params.body) {

            if(key == "fields")
                fields = getFields(params.body.fields,first);
            else
                filter = getfilter(filter,key,params.body[key]);

            first = false;
        }
        
       
    }   

    if(filter != "")
    {
        var maxFilterLength = cfg.Uri_length - url.length - fields.length + "?filter=(&)".length;

        if(maxFilterLength > filter.length)
        {
            returnData.push(url+"?filter=(&"+filter+")"+fields);

        }else
        {
            // while(maxFilterLength < filter.length)
            // {

            //     returnData.push(url+"?filter=(&"+filter+")"+fields);
            // }

        }
        
    }
     

    

    

        

    // console.log(url);
    // console.log(filter);
    // console.log(fields);

    return returnData;
}

function getFields(fields,first)
{
    var returnData;
    var prefix;
    if(first)
        prefix = "?fields=";
    else
        prefix = "&fields=";

    returnData = prefix+fields;

    return returnData;
}

function getfilter(filter,key,newfilter)
{
    var returnData;
    returnData =  filter+"("+key+"="+newfilter+")"
    return returnData;
}

module.exports = connection;