/// <summary> /// Responds to the changes in exchange data. /// </summary> /// <param name="exchangeDelta">Exchange delta stream data.</param> protected static void OnExchangeDeltaUpdate(BittrexExchangeState exchangeDelta) { if (_streams.TryGetValue(exchangeDelta.MarketName, out var stream)) { stream.UpdateExchangeDelta(new BittrexExchangeStateProvider(exchangeDelta)); } }
/// <summary> /// get basic/initial info of a specific market /// 500 Buys /// 100 Fills /// 500 Sells /// </summary> /// <param name="marketName">The name of the market to subscribe on</param> /// <param name="onUpdate">The update event handler</param> /// <returns>ApiResult whether subscription was successful. The Result property contains the Stream Id which can be used to unsubscribe the stream again</returns> public async Task <BittrexApiResult <int> > QueryExchangeStateAsync(string marketName, Action <BittrexExchangeState> onUpdate) { return(await Task.Run(() => { log.Write(LogVerbosity.Debug, $"Going to call QueryExchangeState for market: {marketName}"); if (!CheckConnection()) { return ThrowErrorMessage <int>(BittrexErrors.GetError(BittrexErrorKey.CantConnectToServer)); } // gives direkt return -> no subscription // https://stackoverflow.com/questions/11140164/signalr-console-app-example proxy.Invoke <JObject>("QueryExchangeState", marketName).ContinueWith(task => { if (task.IsFaulted) { log.Write(LogVerbosity.Error, String.Format("There was an error calling send: {0}", task.Exception.GetBaseException())); } else { string json = ""; try { json = task.Result.ToString(); BittrexExchangeState StreamData = JsonConvert.DeserializeObject <BittrexExchangeState>(json); onUpdate(StreamData); } catch (Exception e) { log.Write(LogVerbosity.Warning, $"Received an event but an unknown error occured. Message: {e.Message}, Received data: {json}"); } } }); return new BittrexApiResult <int>() { Success = true }; }).ConfigureAwait(false)); }
/// <summary> /// Initializes the new exchange state provider for Bittrex exchanger. /// </summary> /// <param name="source">Exchange state data source.</param> public BittrexExchangeStateProvider(BittrexExchangeState source) { Source = source; }