private JObject ExecuteMethod(JetMethod method) { double timeoutMs = method.getTimeoutMs(); if (timeoutMs < 0.0) { throw new ArgumentException("timeoutMs"); } if (method.HasResponseCallback()) { int id = method.GetRequestId(); lock (this.openRequests) { method.RequestTimer.Interval = timeoutMs; method.RequestTimer.Elapsed += (sender, e) => RequestTimer_Elapsed(this, e, method); method.RequestTimer.Start(); this.openRequests.Add(id, method); } } JObject request = method.GetJson(); this.connection.SendMessage(JsonConvert.SerializeObject(request)); return(request); }
private static void RequestTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e, JetMethod method) { JetPeer peer = (JetPeer)sender; lock (peer.openRequests) { method.RequestTimer.Stop(); int id = method.GetRequestId(); if (peer.openRequests.ContainsKey(id)) { method = peer.openRequests[id]; peer.openRequests.Remove(id); JObject response = new JObject(); response["jsonrpc"] = "2.0"; response["id"] = id; JObject error = new JObject(); error["code"] = -32100; error["message"] = "timeout while waiting for response"; response["error"] = error; lock (method) { method.CallResponseCallback(false, response); } } } }