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); }
private async Task OnPing(long ts) { WebSocketRequestBuilder builder = new WebSocketRequestBuilder() .AddParam("pong", ts); await this.SendAsync(builder.Build(), CancellationToken.None); }
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; } }
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; } }
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);