コード例 #1
0
        private async Task<JObject> SendRequestAsync(string action, params JProperty[] args)
        {
            var requestId = Guid.NewGuid().ToString();
            var requestInfo = new RequestInfo();
            lock (_requests)
            {
                _requests.Add(requestId, requestInfo);
            }

            var commonProperties = new[]
            {
                new JProperty("action", action),
                new JProperty("requestId", requestId)
            };

            var requestJson = new JObject(commonProperties.Concat(args).Cast<object>().ToArray());
            _webSocket.Send(requestJson.ToString());

            var resultTask = await Task.WhenAny(requestInfo.Task, Task.Delay(Timeout));
            if (resultTask != requestInfo.Task)
                throw new DeviceHiveException("Timeout while waiting for server response!");

            var result = requestInfo.Task.Result;
            var status = (string)result["status"];
            if (status == "error")
                throw new DeviceHiveException((string)result["error"]);

            return result;
        }