Как разделить соединение веб-сокета между различными объектами JS? У меня есть веб-страница, которая автоматически подключается к сокету при загрузке страницы с приглашением на вход. После успешного входа в систему я скрываю пользовательский интерфейс входа в систему и делаю видимым пользовательский интерфейс приложения и загружаю виджет графика (tradingview), передавая свой собственный поток данных в конструкторе виджета. Проблема теперь в виджете, потому что у него нет ссылки на веб-сокет, и не похоже, что передача его в качестве аргумента работает.
ПРИМЕЧАНИЕ. Просто запускаю JS / веб-программирование. Высоко ценится указывать мне правильное направление.
wsfeed.js
var settings_symbols = {};
var webSocket = new WebSocket('ws://localhost:8080/api');
webSocket.onmessage = function processMessage(evt)
{
var json = evt.data;
wsMsgHandler(json);
}
function wsMsgHandler(jsonResponse)
{
jsonResponse = JSON.parse(jsonResponse);
try
{
if(jsonResponse.length>0)
{
if(jsonResponse.API[0].event == "login")
{
if(jsonResponse.API[0].cmd=="settings" && jsonResponse.API[0].result=="success")
{
settings_symbols =jsonResponse.API[0].symbols;
}
doChartLoad(settings_symbols, webSocket);
}
}
}catch(err)
{
}
}
function doChartLoad(settings_symbols, webSocket)
{
var config = {
debug:true,
exchanges:["forex","stock","crypto"],
symbols_types:[],
supported_resolutions:[],
supports_marks:false,
supports_timescale_marks:false,
supports_time:false,
futures_regex:'/^(.+)([12]!|[FGHJKMNQUVXZ]\d{1,2})$/',
}
config.symbols=lstSymbols;
new TradingView.widget({
symbol: 'A',
interval: 'D',
timezone: "America/New_York",
container_id: "tv_chart_container",
locale: "ru",
datafeed: new DatafeedEndpoint(config, webSocket),
library_path: "charting_library/",
});
}
class DatafeedEndpoint
{
constructor(options, webSocket)
{
this.webSocket = webSocket;
}
onReady() {console.log("TV::onReady"); wsChartLoaded();}
searchSymbols() {console.log("TV::searchSymbols");}
resolveSymbol() {console.log("TV::resolveSymbol");}
getBars() {console.log("TV::getBars");}
subscribeBars() {console.log("TV::subscribeBars");}
unsubscribeBars() {console.log("TV::unsubscribeBars");}
wsChartLoaded()
{
try
{
this.webSocket.send(JSON.stringify({'cmd' : 'chart_loaded'}));
}catch (err)
{
console.log(err.Name); // ReferenceError
}
}
}