示例#1
0
        private Task SendRequestAsync(WsTradeMessageRequest msg, Action <int, object> action, CancellationToken cancellationToken)
        {
            if (this._ws == null || this._ws.State != WebSocketState.Open)
            {
                throw new InvalidOperationException("websocket is not open");
            }

            try
            {
                _request_callback[msg.ReqID] = action;
                return(this._ws?.SendAsync(new ArraySegment <byte>(msg.GetSigneBuffer(_apikey, _apisecret)), WebSocketMessageType.Text, true, cancellationToken));
            }
            catch (Exception ex)
            {
                _request_callback.Remove(msg.ReqID);
                throw ex;
            }
        }
示例#2
0
        /// <summary>
        /// 与服务器比对时间
        /// </summary>
        /// <param name="cb"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task REQ_TimeAsync(Action <int, long> cb, CancellationToken cancellationToken)
        {
            long localtm = DateTimeOffset.Now.ToUnixTimeMilliseconds();
            var  req     = new WsTradeMessageRequest("Time", localtm);

            await this.SendRequestAsync(req, (code, data) =>
            {
                // {"code":0,"data":{"data":"1545808556560","time":1545808556646},"rid":"14"}
                long delta = 0;
                if (code == 0)
                {
                    var obj = data as Newtonsoft.Json.Linq.JObject;
                    if (obj != null && obj.ContainsKey("time"))
                    {
                        var servertm = obj["time"].ToObject <long>();
                        delta        = servertm - localtm;
                    }
                }
                cb(code, delta);
            },
                                        cancellationToken);
        }