Esempio n. 1
0
 private MarketDataWebClient(string url, ProtoSchemes schemes)
     : base(url, schemes)
 {
     AddHandler(Schemes.Quotes.MessageId, OnQuotesHandler);
     AddHandler(Schemes.Entries.MessageId, OnEntriesHandler);
     AddHandler(Schemes.Snapshot.MessageId, OnSnapshotHandler);
     AddHandler(Schemes.OrderLog.MessageId, OnOrderLogHandler);
 }
Esempio n. 2
0
        protected BinaryWebSocketClient(string url, ProtoSchemes schemes)
            : base(url)
        {
            Schemes = schemes;

            AddHandler(Schemes.AuthNonce.MessageId, AuthNonceHandler);
            AddHandler(Schemes.AuthOk.MessageId, AuthOkHandler);
            AddHandler(Schemes.Error.MessageId, ErrorHandler);
        }
Esempio n. 3
0
        public async Task StartAsync()
        {
            Log.Information("Start terminal services");

            var configuration = Configuration.GetSection($"Services:{Account.Network}");

            // init schemes
            Schemes = new ProtoSchemes(
                currencies: Account.Currencies,
                symbols: Account.Symbols);

            // init market data repository
            MarketDataRepository = new MarketDataRepository(Account.Symbols);

            // init exchange client
            ExchangeClient                = new ExchangeWebClient(configuration, Schemes);
            ExchangeClient.Connected     += OnExchangeConnectedEventHandler;
            ExchangeClient.Disconnected  += OnExchangeDisconnectedEventHandler;
            ExchangeClient.AuthOk        += OnExchangeAuthOkEventHandler;
            ExchangeClient.AuthNonce     += OnExchangeAuthNonceEventHandler;
            ExchangeClient.Error         += OnExchangeErrorEventHandler;
            ExchangeClient.OrderReceived += OnExchangeOrderEventHandler;
            ExchangeClient.SwapReceived  += OnSwapReceivedEventHandler;

            // init market data client
            MarketDataClient                   = new MarketDataWebClient(configuration, Schemes);
            MarketDataClient.Connected        += OnMarketDataConnectedEventHandler;
            MarketDataClient.Disconnected     += OnMarketDataDisconnectedEventHandler;
            MarketDataClient.AuthOk           += OnMarketDataAuthOkEventHandler;
            MarketDataClient.AuthNonce        += OnMarketDataAuthNonceEventHandler;
            MarketDataClient.Error            += OnMarketDataErrorEventHandler;
            MarketDataClient.QuotesReceived   += OnQuotesReceivedEventHandler;
            MarketDataClient.EntriesReceived  += OnEntriesReceivedEventHandler;
            MarketDataClient.SnapshotReceived += OnSnapshotReceivedEventHandler;

            // init swap manager
            SwapManager = new ClientSwapManager(
                account: Account,
                swapClient: ExchangeClient,
                taskPerformer: TaskPerformer);
            SwapManager.SwapUpdated += (sender, args) => SwapUpdated?.Invoke(sender, args);

            // run services
            await Task.WhenAll(
                ExchangeClient.ConnectAsync(),
                MarketDataClient.ConnectAsync())
            .ConfigureAwait(false);

            // run tracker
            TaskPerformer.EnqueueTask(new BalanceUpdateTask
            {
                Account  = Account,
                Interval = TimeSpan.FromSeconds(Account.UserSettings.BalanceUpdateIntervalInSec)
            });
            TaskPerformer.Start();

            // start to track unconfirmed transactions
            await TrackUnconfirmedTransactionsAsync()
            .ConfigureAwait(false);

            // restore swaps
            SwapManager.RestoreSwapsAsync().FireAndForget();
        }
Esempio n. 4
0
 public MarketDataWebClient(IConfiguration configuration, ProtoSchemes schemes)
     : this(configuration["MarketData:Url"], schemes)
 {
 }
Esempio n. 5
0
 private ExchangeWebClient(string url, ProtoSchemes schemes)
     : base(url, schemes)
 {
     AddHandler(Schemes.Order.MessageId, OnOrderHandler);
     AddHandler(Schemes.Swap.MessageId, OnSwapHandler);
 }
Esempio n. 6
0
 public ExchangeWebClient(IConfiguration configuration, ProtoSchemes schemes)
     : this(configuration[ExchangeUrlKey], schemes)
 {
 }