public async Task <IObservable <BfTicker> > GetTickerSource(ProductCode productCode) { TryOpen(); await InitProductCodeAliasesAsync(); return(_tickSources.GetOrAdd(productCode, _ => { var realProductCode = ProductCodeAliases.GetProductCodeFromAlias(productCode.ToEnumString()); var source = new RealtimeTickerSource(_webSocket, JsonSerializerSettingsFactory.GetDefaultSettings(), realProductCode); _webSocketSources[source.Channel] = source; return source.Publish().RefCount(); })); }
private async Task InitProductCodeAliasesAsync() { if (ProductCodeAliases.HasGotProductCodes()) { return; // Already initialized } foreach (var response in await _client.GetAllMarketsAsync()) { if (response.IsError) { if (response.Exception != null) { throw response.Exception; } else { throw new InvalidOperationException(response.ErrorMessage); } } ProductCodeAliases.Populate(response.GetResult()); } }