示例#1
0
        protected override async Task <string> SendUnsubscribe(string key, CancellationToken cancellationToken = default)
        {
            string clientid = Guid.NewGuid().ToString();
            string unsubkey = GetUnsubscribeKey(key, clientid);
            WebSocketRequestBuilder builder = new WebSocketRequestBuilder()
                                              .AddParam("op", "unsub")
                                              .AddParam("cid", clientid)
                                              .AddParam("topic", key);

            string json = builder.Build();

            await SendAsync(json, cancellationToken);

            var task = Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    Thread.Sleep(10);
                    if (_messagePool.TryGetValue(unsubkey, out string response))
                    {
                        _messagePool.Remove(unsubkey);
                        return(response);
                    }
                }
            }, cancellationToken);

            var repJson = await task;

            return(repJson);
        }
示例#2
0
        private async Task OnPing(long ts)
        {
            WebSocketRequestBuilder builder = new WebSocketRequestBuilder()
                                              .AddParam("pong", ts);

            await this.SendAsync(builder.Build(), CancellationToken.None);
        }
示例#3
0
        public async Task <string> Request(DateTime from, DateTime to)
        {
            try
            {
                WebSocketRequestBuilder builder = new WebSocketRequestBuilder()
                                                  .AddParam("from", (int)(from.ToUniversalTime() - DateTime.UnixEpoch).TotalSeconds)
                                                  .AddParam("to", (int)(to.ToUniversalTime() - DateTime.UnixEpoch).TotalSeconds);

                var response = await SendRequest(SubscribeKey, builder, CancellationToken.None);

                CheckResultAndThrow(response);
                return(response);
            }
            catch
            {
                throw;
            }
        }
示例#4
0
        public async Task Auth(CancellationToken cancellationToken = default)
        {
            string authkey = GetAuthKey();

            DateTime now = DateTime.UtcNow;

            string signature = GetSignature(now);

            WebSocketRequestBuilder builder2 = new WebSocketRequestBuilder()
                                               .AddParam("op", "auth")
                                               .AddParam("type", "api")
                                               .AddParam(_aKKey, _accesskey)
                                               .AddParam(_sMKey, _sMValue)
                                               .AddParam(_sVKey, _sVValue)
                                               .AddParam(_tKey, now.ToString("s"))
                                               .AddParam(_sKey, signature);

            await this.SendAsync(builder2.Build(), cancellationToken);

            var task = Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    Thread.Sleep(10);
                    if (_messagePool.TryGetValue(authkey, out string response))
                    {
                        _messagePool.Remove(authkey);
                        return(response);
                    }
                }
            }, cancellationToken);

            var repJson = await task;

            JToken jt       = JToken.Parse(repJson);
            int    err_code = jt["err-code"].ToObject <int>();

            if (err_code != 0)
            {
                throw new Exception($"{GetType()}.{nameof(Auth)} failed: {jt["err-msg"].ToObject<string>()}({err_code})");
            }
        }
        public async Task Subcribe(Action <string> handler, CancellationToken cancellationToken)
        {
            this.handler += handler;
            if (isSubbed)
            {
                return;
            }

            WebSocketRequestBuilder requestBuilder = GetRequestBuilder();
            var response = await SendSubscribe(SubscribeKey, requestBuilder, cancellationToken);

            try
            {
                CheckResultAndThrow(response);
                isSubbed = true;
                return;
            }
            catch
            {
                this.handler -= handler;
                isSubbed      = false;
                throw;
            }
        }
示例#6
0
 protected override Task <string> SendRequest(string key, WebSocketRequestBuilder builder, CancellationToken cancellationToken)
 {
     throw new NotImplementedException();
 }
 protected abstract Task <string> SendSubscribe(string key, WebSocketRequestBuilder builder, CancellationToken cancellationToken);