public void Can_encode_findvalue_response() { var node = new KNodeId32(1); var buffer = new ArrayBufferWriter <byte>(); var encoder = new KJsonMessageEncoder <KNodeId32>(); var body = new KFindValueResponse <KNodeId32>(new KNodeInfo <KNodeId32>[] { new KNodeInfo <KNodeId32>(node, new[] { new Uri("http://www.google.com") }) }, new KValueInfo(new byte[0], 1, DateTime.UtcNow.AddSeconds(.9))); var message = new KResponse <KNodeId32, KFindValueResponse <KNodeId32> >(new KMessageHeader <KNodeId32>(node, 1), KResponseStatus.Success, body); encoder.Encode(new KMessageContext <KNodeId32>("application/json".Yield()), buffer, new KMessageSequence <KNodeId32>(1, new IKMessage <KNodeId32>[] { message })); var j = JObject.Parse(Encoding.UTF8.GetString(buffer.WrittenSpan.ToArray())); var z = JObject.ReadFrom(new JsonTextReader(new StreamReader(typeof(KJsonMessageEncoderTests).Assembly.GetManifestResourceStream("Alethic.Kademlia.Tests.Json.Samples.findvalue_response.json")))); j.Should().BeEquivalentTo(z); }
/// <summary> /// /// </summary> /// <param name="response"></param> /// <param name="e"></param> private void HandleException(KResponse <T> response, Exception e) { response.Status = EkResponseStatus.Failure; response.Message = e.Message; response.Errors = new List <string> { e.Message }; if (e.InnerException != null) { response.Errors = response.Errors.Append(e.InnerException.Message); } Log.Logger.Error($"An error has occured : {e.Message} - {e.InnerException?.Message}"); }
/// <summary> /// Get a response with a list /// </summary> /// <param name="apiMethod">The function that produces the results</param> /// <returns>The response with the results</returns> protected KResponse <T> GetResponse(Func <List <T> > apiMethod) { var response = new KResponse <T>(); try { response.Status = EkResponseStatus.Success; response.Content = new KContent <T> { Results = apiMethod.Invoke() }; } catch (Exception e) { HandleException(response, e); } return(response); }
/// <summary> /// /// </summary> /// <param name="apiMethod"></param> /// <returns></returns> protected KResponse <long> Count(Func <long> apiMethod) { var response = new KResponse <long>(); try { response.Status = EkResponseStatus.Success; response.Content = new KContent <long> { Result = apiMethod.Invoke() }; } catch (Exception e) { HandleException(response, e); } return(response); }