Пример #1
0
        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);
        }
Пример #2
0
        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);
                    }
                }
            }
        }