Files
Superalgos/Files-Component/src/MarketFiles.js
T
2020-04-22 14:41:23 +02:00

198 lines
5.7 KiB
JavaScript


function newMarketFiles () {
const MODULE_NAME = 'Market Files'
const ERROR_LOG = true
const logger = newWebDebugLog()
logger.fileName = MODULE_NAME
let thisObject = {
eventHandler: undefined,
getFile: getFile,
getExpectedFiles: getExpectedFiles,
getFilesLoaded: getFilesLoaded,
getFilesNotLoaded: getFilesNotLoaded,
initialize: initialize,
finalize: finalize
}
let filesLoaded = 0
let filesNotLoaded = 0
let fileCloud
let files = new Map()
let market
let exchange
let dataMine
let bot
let session
let dataset
let product
let periodName
thisObject.eventHandler = newEventHandler()
let intervalHandle
let finalized = false
let eventSubscriptionIdDatasetUpdated = []
let eventsServerClient
return thisObject
function finalize () {
try {
for (let i = 0; i < eventSubscriptionIdDatasetUpdated.length; i++) {
eventsServerClient.stopListening('Dataset Updated', eventSubscriptionIdDatasetUpdated[i])
}
thisObject.eventHandler.finalize()
thisObject.eventHandler = undefined
filesLoaded = undefined
files = undefined
market = undefined
exchange = undefined
dataMine = undefined
bot = undefined
session = undefined
dataset = undefined
product = undefined
periodName = undefined
eventsServerClient = undefined
finalized = true
} catch (err) {
if (ERROR_LOG === true) { logger.write('[ERROR] finalize -> err = ' + err.stack) }
}
}
function initialize (
pDataMine,
pBot,
pSession,
pProduct,
pDataset,
pExchange,
pMarket,
pHost,
pPort,
pEventsServerClient,
callBackFunction) {
try {
exchange = pExchange
market = pMarket
dataMine = pDataMine
bot = pBot
session = pSession
dataset = pDataset
product = pProduct
eventsServerClient = pEventsServerClient
fileCloud = newFileCloud()
fileCloud.initialize(pBot, pHost, pPort)
/* Some Validations */
if (dataset.code.validTimeFrames === undefined) {
if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = Can not initialize Market Files for bot ' + pBot.name) }
if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = You need to define validTimeFrames at the Dataset config. ') }
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
return
}
/* 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 (dataset.code.validTimeFrames.includes(periodName) === true) {
fileCloud.getFile(dataMine, bot, session, product, dataset, exchange, market, periodName, undefined, undefined, undefined, onFileReceived)
function onFileReceived (err, file) {
try {
if (finalized === true) { return }
if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) {
files.set(periodTime, file)
filesLoaded++
} else {
filesNotLoaded++
}
if (filesLoaded + filesNotLoaded === marketFilesPeriods.length) {
let key = dataMine.code.codeName + '-' + bot.code.codeName + '-' + product.code.codeName + '-' + dataset.code.codeName + '-' + exchange.name + '-' + market.baseAsset + '/' + market.quotedAsset
let callerId = key + '-' + periodName + newUniqueId()
eventsServerClient.listenToEvent(key, 'Dataset Updated', undefined, callerId, onResponse, updateFiles)
callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, thisObject)
function onResponse (message) {
eventSubscriptionIdDatasetUpdated.push(message.eventSubscriptionId)
}
}
} catch (err) {
if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> onFileReceived -> err = ' + err.stack) }
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
}
}
}
}
} catch (err) {
if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) }
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
}
}
function updateFiles () {
try {
if (finalized === true) { return }
let updatedFiles = 0
/* 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 (dataset.code.validTimeFrames.includes(periodName) === true) {
fileCloud.getFile(dataMine, bot, session, product, dataset, exchange, market, periodName, undefined, undefined, undefined, onFileReceived)
function onFileReceived (err, file) {
try {
if (finalized === true) { return }
files.set(periodTime, file)
updatedFiles++
if (updatedFiles === marketFilesPeriods.length) {
thisObject.eventHandler.raiseEvent('Files Updated')
}
} catch (err) {
if (ERROR_LOG === true) { logger.write('[ERROR] updateFiles -> onFileReceived -> err = ' + err.stack) }
}
}
}
}
} catch (err) {
if (ERROR_LOG === true) { logger.write('[ERROR] updateFiles -> err = ' + err.stack) }
}
}
function getFile (pPeriod) {
return files.get(pPeriod)
}
function getExpectedFiles () {
return marketFilesPeriods.length
}
function getFilesLoaded () {
return filesLoaded
}
function getFilesNotLoaded () {
return filesNotLoaded
}
}