public void ExecuteJsonMethodAsTokenAsync(string JsonMethod, string ResultElement, object State, JsonMethodCallbackToken Callback) { ExecuteJsonMethodAsTokenAsync(JsonMethod, null, ResultElement, State, Callback); }
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); } }