Exemple #1
0
 public void ExecuteJsonMethodAsTokenAsync(string JsonMethod, string ResultElement, object State, JsonMethodCallbackToken Callback)
 {
     ExecuteJsonMethodAsTokenAsync(JsonMethod, null, ResultElement, State, Callback);
 }
Exemple #2
0
        public void ExecuteJsonMethodAsTokenAsync(string JsonMethod, Dictionary <string, object> Params, string ResultElement, object State, JsonMethodCallbackToken Callback)
        {
            byte[] Buffer;
            int    Length;

            lock (UsbLock)
            {
                string jsonrpc = "2.0";
                int    id      = MessageId++;
                string method  = JsonMethod;
                Dictionary <string, object> @params = new Dictionary <string, object>();
                if (Params != null)
                {
                    foreach (KeyValuePair <string, object> Param in Params)
                    {
                        if (Param.Value is byte[])
                        {
                            @params.Add(Param.Key, ((byte[])Param.Value).Select(b => (int)b).ToArray()); // convert to int-array
                        }
                        else
                        {
                            @params.Add(Param.Key, Param.Value);
                        }
                    }
                }
                @params.Add("MessageVersion", 0);
                string Request = JsonConvert.SerializeObject(new { jsonrpc, id, method, @params });

                byte[] OutBuffer = System.Text.Encoding.ASCII.GetBytes(Request);
                Device.OutputPipe.BeginWrite(OutBuffer, 0, OutBuffer.Length, (AsyncResultWrite) =>
                {
                    Device.OutputPipe.EndWrite(AsyncResultWrite);
                    Buffer = new byte[0x10000];
                    Device.InputPipe.BeginRead(Buffer, 0, 0x10000, (AsyncResultRead) =>
                    {
                        Length = Device.InputPipe.EndRead(AsyncResultRead);

                        Newtonsoft.Json.Linq.JObject ResultMessage = Newtonsoft.Json.Linq.JObject.Parse(System.Text.ASCIIEncoding.ASCII.GetString(Buffer, 0, Length));

                        JToken ResultToken = ResultMessage.Root.SelectToken("result");
                        if ((ResultToken == null) || (ResultElement == null))
                        {
                            Callback(AsyncResultRead.AsyncState, null);
                        }
                        Callback(AsyncResultRead.AsyncState, ResultToken.SelectToken(ResultElement));
                    }, AsyncResultWrite.AsyncState);
                }, State);
            }
        }