trading-vue3-js
Version:
Customizable charting lib for traders. Based on https://github.com/C451/trading-vue-js by C451.
165 lines (109 loc) • 3.58 kB
JavaScript
// Web-worker
import se from './script_engine.js'
import Utils from '../stuff/utils.js'
import * as u from './script_utils.js'
import { DatasetWW } from './dataset.js'
// Test environment (Node) has no self (WebWorker global)
const _self = typeof self !== 'undefined' ? self : null
var data_requested = false
// DC => WW
if (_self) _self.onmessage = async e => {
//console.log('Worker got:', e.data.type)
switch(e.data.type) {
case 'update-dc-settings':
se.sett = e.data.data
break
case 'exec-script':
var req = se.data_required(e.data.data.s)
if (req && !data_requested) {
data_requested = true
_self.postMessage({
type: 'request-data', data: req
})
}
se.tf = u.tf_from_str(e.data.data.tf)
se.range = e.data.data.range
se.queue.push(e.data.data.s)
se.exec_all()
break
case 'exec-all-scripts':
var req = se.data_required(e.data.data.s)
if (req && !data_requested) {
data_requested = true
self.postMessage({
type: 'request-data', data: req
})
}
se.tf = u.tf_from_str(e.data.data.tf)
se.range = e.data.data.range
se.exec_all()
break
case 'upload-data':
_self.postMessage({ type: 'data-uploaded' })
await Utils.pause(1)
for (var id in e.data.data) {
let data = e.data.data[id]
se.data[id] = new DatasetWW(id, data)
}
se.recalc_size()
data_requested = false
se.exec_all()
break
case 'upload-module':
let lib = u.make_module_lib(e.data.data)
se.mods[e.data.data.id] = new (
new Function(
'mod', 'se', 'lib',
u.f_body(e.data.data.main)
)
)(e.data.data.id, se, lib)
break
case 'module-event':
// TODO: this
break
case 'update-data':
DatasetWW.update_all(se, e.data.data)
if (e.data.data.ohlcv) {
se.update(e.data.data.ohlcv)
}
break
case 'get-dataset':
_self.postMessage({
id: e.data.id,
data: se.data[e.data.data]
})
break
case 'dataset-op':
await Utils.pause(1)
if (e.data.data.id in se.data) {
se.data[e.data.data.id].op(se, e.data.data)
}
if (e.data.data.exec) se.exec_all()
break
case 'update-ov-settings':
se.tf = u.tf_from_str(e.data.data.tf)
se.range = e.data.data.range
se.exec_sel(e.data.data.delta)
break
case 'send-meta-info':
se.tf = u.tf_from_str(e.data.data.tf)
se.range = e.data.data.range
break
case 'remove-scripts':
se.remove_scripts(e.data.data)
break
}
}
// WW => DC
se.send = (type, data) => {
switch(type) {
case 'overlay-data':
case 'overlay-update':
case 'engine-state':
case 'modify-overlay':
case 'module-data':
case 'script-signal':
if (_self) _self.postMessage({type, data})
break
}
}