public static async Task SendPongRequestAsync(this IFeedManager subscriptionManager, MessageContext <PingMessage> context)
 {
     var request = new PongRequest()
     {
         Timestamp = context.Message.Timestamp
     };
     await subscriptionManager.SendAsync(context.Next <IWebSocketRequest>(request), CancellationToken.None);
 }
        public static Task SendDataSubscribeRequestAsync(
            this IFeedManager subscriptionManager,
            MessageContext <TranslationSubscriptionRequest <TranslationState> > messageContext,
            CancellationToken cancellationToken
            )
        {
            var request = new DataSubscribeRequest()
            {
                TranslationId = messageContext.Message.Id, LastEventNumber = messageContext.Message.State.LastDataMessageId
            };

            return(subscriptionManager.SendAsync(messageContext.Next <IWebSocketRequest>(request), cancellationToken));
        }
        public static Task SendDataUnsubscribeRequestAsync(
            this IFeedManager subscriptionManager,
            MessageContext <TranslationUnsubscriptionRequest> messageContext,
            CancellationToken cancellationToken
            )
        {
            var request = new DataUnsubscribeRequest()
            {
                TranslationId = messageContext.Message.Id
            };

            return(subscriptionManager.SendAsync(messageContext.Next <IWebSocketRequest>(request), cancellationToken));
        }
        public static Task SendMarketSubscribeRequestAsync(
            this IFeedManager subscriptionManager,
            MessageContext <TranslationSubscriptionRequest <TranslationState> > messageContext,
            FeedSubscriberOptions options,
            CancellationToken cancellationToken
            )
        {
            var request = new MarketSubscribeRequest()
            {
                TranslationId   = messageContext.Message.Id,
                LastEventNumber = messageContext.Message.State.LastMarketMessageId,
            };

            request.Parameters.Margin = options.Margin;

            return(subscriptionManager.SendAsync(messageContext.Next <IWebSocketRequest>(request), cancellationToken));
        }
        public static async Task LoginAsync(this IFeedManager subscriptionManager, string userName, string password)
        {
            using (var md5 = MD5.Create())
            {
                var enc = Encoding.UTF8;
                var ts  = DateTimeOffset.Now.ToUnixTimeSeconds().ToString();

                var passwordHashString = BytesToString(md5.ComputeHash(enc.GetBytes(password)));
                var auth = BytesToString(md5.ComputeHash(enc.GetBytes(passwordHashString + ts))) + ":" + ts;

                var request = new LoginRequest()
                {
                    UserName = userName, AuthKey = auth
                };

                await subscriptionManager.SendAsync(new MessageContext <IWebSocketRequest>(request), CancellationToken.None);
            }
        }