예제 #1
0
        static public ExchangeCallback CreateCallback(IExchangeMarketData exchangeMarketData, IEventBus eventBus)
        {
            return((exchangeId, baseCurrency, quoteCurrency, info) =>
            {
                WriteMarketData(exchangeId, baseCurrency, quoteCurrency, info, exchangeMarketData).Wait();

                try
                {
                    if (!String.IsNullOrEmpty(exchangeId))
                    {
                        var @event = new ExchangeOrderBookUpdatedIntegrationEvent(
                            Int32.Parse(exchangeId),
                            baseCurrency,
                            quoteCurrency,
                            exchangeMarketData.GetMarketData(exchangeId, baseCurrency, quoteCurrency)
                            );

                        eventBus.Publish(@event);
                        //.Publish(new TimeForUpdateBalanceIntegrationEvent());
                    }
                }

                catch (Exception ex)
                {
                    Debug.WriteLine("Publish Event: ExchangeOrderBookUpdatedIntegrationEvent. \n" +
                                    "Error message: " + ex.Message);
                }
            });
        }
예제 #2
0
 static public ExchangeCallback CreateDecodeCallback(IExchangeMarketData exchangeMarketData)
 {
     return((exchangeId, baseCurrency, quoteCurrency, info) =>
     {
         WriteMarketData(exchangeId, baseCurrency, quoteCurrency, Decode(info), exchangeMarketData).Wait();
     });
 }
예제 #3
0
 public WebsocketHostService(IWebsocketService websocketService, IOptions <ExchangeApiSetting> exchangeApiSetting,
                             IExchangeMarketData exchangeMarketData, IExchangeBalanceData exchangeBalanceData,
                             IExchangeApiClient exchangeApiClient)
 {
     _websocketService    = websocketService;
     _exchangeApiSettings = exchangeApiSetting;
     _exchangeMarketData  = exchangeMarketData;
     _exchangeBalanceData = exchangeBalanceData;
     _exchangeApiClient   = exchangeApiClient;
 }
예제 #4
0
        public WebsocketService(IExchangeMarketData exchangeMarketData, IEventBus eventBus)
        {
            //Injection
            _exchangeMarketData = exchangeMarketData ?? throw new ArgumentNullException(nameof(exchangeMarketData));
            _eventBus           = eventBus ?? throw new ArgumentNullException(nameof(eventBus));

            //Set delegates
            _updateAndDecodeExchangeState = CreateDecodeCallback(_exchangeMarketData);
            _updateExchangeState          = CreateCallback(_exchangeMarketData, _eventBus);



            //Bittrex
            _hubConnection = new HubConnection("https://socket.bittrex.com/signalr");
            _hubProxy      = _hubConnection.CreateHubProxy("c2");
            _hubConnection.Start().Wait();


            //Binance
            _binanceHubConnection = new BinanceSocketClient();


            //Bitstamp
            _bitstampHubConnection = new Pusher("de504dc5763aeef9ff52");
            _bitstampHubConnection.Connect();


            //Poloniex
            _poloniexHubConnection = new PoloniexChannel();
            _poloniexHubConnection.ConnectAsync().Wait();


            //Kucoin
            using (var client = new HttpClient())
            {
                var tokenAcquireUri = "https://kitchen.kucoin.com/v1/bullet/usercenter/loginUser?protocol=websocket&encrypt=true";
                using (HttpResponseMessage res = client.GetAsync(tokenAcquireUri).Result)
                {
                    using (HttpContent content = res.Content)
                    {
                        var jRes = JObject.Parse(
                            content.ReadAsStringAsync().Result
                            );
                        var bulletToken = jRes["data"]["bulletToken"].ToString();

                        _kucoinHubConnection = new WebSocket(
                            "wss://push1.kucoin.com/endpoint?bulletToken=" + bulletToken + "&format=json&resource=api");

                        _kucoinHubConnection.Connect();
                        var success = _kucoinHubConnection.Ping();
                    }
                }
            }
        }
예제 #5
0
 private static async Task WriteMarketData(string exchangeId, string baseCurrency, string quoteCurrency, string data, IExchangeMarketData exchangeMarketData)
 {
     await Task.Run(() =>
     {
         exchangeMarketData.WriteMarketData(exchangeId, baseCurrency, quoteCurrency, data);
     });
 }
예제 #6
0
 public ExchangeQueries(IExchangeMarketData exchangeMarketData)
 {
     //_connectionString = !string.IsNullOrWhiteSpace(constr) ? constr : throw new ArgumentNullException(nameof(constr));
     _marketData = exchangeMarketData;
 }