Как разделить соединение websocket между объектами JS? - PullRequest
0 голосов
/ 30 мая 2019

Как разделить соединение веб-сокета между различными объектами 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
            }

        }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...