function newMarketFiles() { const MODULE_NAME = "Market Files"; const INFO_LOG = false; const ERROR_LOG = true; const logger = newWebDebugLog(); logger.fileName = MODULE_NAME; let thisObject = { eventHandler: undefined, getFile: getFile, getExpectedFiles: getExpectedFiles, getFilesLoaded: getFilesLoaded, initialize: initialize, finalize: finalize } let filesLoaded = 0; let fileCloud; let files = new Map; let market; let exchange; let devTeam; let bot; let thisSet; let periodName; thisObject.eventHandler = newEventHandler(); let intervalHandle; return thisObject; function finalize() { try { if (INFO_LOG === true) { logger.write("[INFO] finalize -> Entering function."); } clearInterval(intervalHandle); filesLoaded = undefined; files = undefined; } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] finalize -> err = " + err); } } } function initialize(pDevTeam, pBot, pProduct, pSet, pExchange, pMarket, callBackFunction) { try { if (INFO_LOG === true) { logger.write("[INFO] initialize -> Entering function."); } if (INFO_LOG === true) { logger.write("[INFO] initialize -> key = " + pDevTeam.codeName + "-" + pBot.codeName + "-" + pProduct.codeName); } exchange = ecosystem.getExchange(pProduct, pExchange); if (exchange === undefined) { throw "Exchange not supoorted by this pProduct of the ecosystem! - pDevTeam.codeName = " + pDevTeam.codeName + ", pBot.codeName = " + pBot.codeName + ", pProduct.codeName = " + pProduct.codeName + ", pExchange = " + pExchange; } intervalHandle = setInterval(updateFiles, _10_MINUTES_IN_MILISECONDS); market = pMarket; devTeam = pDevTeam; bot = pBot; thisSet = pSet; fileCloud = newFileCloud(); fileCloud.initialize(pBot); /* Now we will get the market files */ for (let i = 0; i < marketFilesPeriods.length; i++) { let periodTime = marketFilesPeriods[i][0]; let periodName = marketFilesPeriods[i][1]; if (thisSet.validPeriods.includes(periodName) === true) { fileCloud.getFile(devTeam, bot, thisSet, exchange, market, periodName, undefined, undefined, undefined, onFileReceived); function onFileReceived(err, file) { try { if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> Entering function."); } switch (err.result) { case GLOBAL.DEFAULT_OK_RESPONSE.result: { if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> Received OK Response."); } break; } case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> Received FAIL Response."); } callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); return; } case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> Received CUSTOM FAIL Response."); } if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> err.message = " + err.message); } callBackFunction(err); return; } default: { if (INFO_LOG === true) { logger.write("[INFO] initialize -> onFileReceived -> Received Unexpected Response."); } callBackFunction(err); return; } } files.set(periodTime, file); filesLoaded++; callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, thisObject); // Note that the callback is called for every file loaded. } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> onFileReceived -> err = " + err); } callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } } } } } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] initialize -> err = " + err); } callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE); } } function updateFiles() { try { let updateFiles = 0; if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> Entering function."); } /* Now we will get the market files */ for (let i = 0; i < marketFilesPeriods.length; i++) { let periodTime = marketFilesPeriods[i][0]; let periodName = marketFilesPeriods[i][1]; if (thisSet.validPeriods.includes(periodName) === true) { fileCloud.getFile(devTeam, bot, thisSet, exchange, market, periodName, undefined, undefined, undefined, onFileReceived); function onFileReceived(err, file) { try { if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Entering function."); } switch (err.result) { case GLOBAL.DEFAULT_OK_RESPONSE.result: { if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Received OK Response."); } break; } case GLOBAL.DEFAULT_FAIL_RESPONSE.result: { if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Received FAIL Response."); } return; } case GLOBAL.CUSTOM_FAIL_RESPONSE.result: { if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Received CUSTOM FAIL Response."); } if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> err.message = " + err.message); } return; } default: { if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> Received Unexpected Response."); } return; } } files.set(periodTime, file); updateFiles++; if (updateFiles === marketFilesPeriods.length) { if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> All files received. "); } if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> devTeam = " + devTeam.codeName); } if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> bot = " + bot.codeName); } if (INFO_LOG === true) { logger.write("[INFO] updateFiles -> onFileReceived -> thisSet = " + thisSet.codeName); } thisObject.eventHandler.raiseEvent("Files Updated", undefined); } } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] updateFiles -> onFileReceived -> err = " + err); } } } } } } catch (err) { if (ERROR_LOG === true) { logger.write("[ERROR] updateFiles -> err = " + err); } } } function getFile(pPeriod) { if (INFO_LOG === true) { logger.write("[INFO] getFile -> Entering function."); } return files.get(pPeriod); } function getExpectedFiles() { if (INFO_LOG === true) { logger.write("[INFO] getExpectedFiles -> Entering function."); } return marketFilesPeriods.length; } function getFilesLoaded() { if (INFO_LOG === true) { logger.write("[INFO] getFilesLoaded -> Entering function."); } return filesLoaded; } }