/// <summary> /// /// </summary> /// <param name="request"></param> /// <returns></returns> /// <remarks> /// ここでの戻り値[JsonRpcParamsResponse]は直接通信で返すものではない。 /// 通信応答を返す際に、ここの応答をJsonRpcFactory.CreateResultで整形して返す。 /// </remarks> public async Task <JsonRpcParamsResponse> Exec(JsonRpcQuery request) { var url = this._settings.RpcUri; HttpResponseMessage message; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json") ); client.DefaultRequestHeaders.Add("User-Agent", ".NET Foundation Repository Reporter"); client.Timeout = TimeSpan.FromMilliseconds(500000); // 500秒 try { var sendJson = JsonConvert.SerializeObject(request); var content = new StringContent(sendJson, Encoding.UTF8, "application/json"); content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); message = await client.PostAsync(url, content); } catch (Exception ex) { var response = new JsonRpcParamsResponse() { Error = ex }; if (request is JsonRpcQueryRequest) { response.Id = ((JsonRpcQueryRequest)request).Id; } return(response); } var json = await message.Content.ReadAsStringAsync(); if (json == null || string.IsNullOrEmpty(json)) { // 通知の時は応答JSON自体が無いことがある。 return(null); } else { var response = JsonConvert.DeserializeObject <JsonRpcParamsResponse>(json); return(response); } } }
public override object ReadJson( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer ) { var jObject = JObject.Load(reader); if (jObject.TryGetValue(RecievedConverter.RecievedJsonRpc, out _)) { var result = new JsonRpcParamsResponse(); serializer.Populate(jObject.CreateReader(), result); return(result); } if (jObject.TryGetValue(RecievedConverter.RecievedEvent, out _)) { return(jObject.ToObject <IEventArgs>()); } return(null); }