/// <inheritdoc /> public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var item = JObject.Load(reader); var(_, messageType) = MessageUtils.ParseMessageType(item["@type"].ToObject <string>()); IEnvelopeMessage message; switch (messageType) { case MessageTypes.Forward: message = new ForwardEnvelopeMessage(); break; case MessageTypes.ForwardToKey: message = new ForwardToKeyEnvelopeMessage(); break; default: throw new TypeLoadException("Unsupported serialization type."); } serializer.Populate(item.CreateReader(), message); return(message); }
public void CanConvertEnvelopeMessage() { var type = MessageUtils.FormatDidMessageType("3NnbYBdhyHfuFZnbaZhuU6", MessageTypes.Forward); var expected = new ForwardEnvelopeMessage { Type = type }; var json = JsonConvert.SerializeObject(expected); var actual = JsonConvert.DeserializeObject <IEnvelopeMessage>(json); Assert.IsType <ForwardEnvelopeMessage>(actual); Assert.Equal(type, ((ForwardEnvelopeMessage)actual).Type); }
/// <inheritdoc /> public virtual async Task AcceptRequestAsync(Wallet wallet, string connectionId) { Logger.LogInformation(LoggingEvents.AcceptConnectionRequest, "ConnectionId {0}", connectionId); var connection = await GetAsync(wallet, connectionId); await connection.TriggerAsync(ConnectionTrigger.Request); await Pairwise.CreateAsync(wallet, connection.TheirDid, connection.MyDid, connection.Endpoint.ToJson()); await RecordService.UpdateAsync(wallet, connection); // Send back response message var provisioning = await ProvisioningService.GetProvisioningAsync(wallet); var response = new ConnectionDetails { Did = connection.MyDid, Endpoint = provisioning.Endpoint, Verkey = connection.MyVk }; var responseMessage = await MessageSerializer.PackSealedAsync <ConnectionResponseMessage>(response, wallet, connection.MyVk, connection.TheirVk); responseMessage.Type = MessageUtils.FormatDidMessageType(connection.TheirDid, MessageTypes.ConnectionResponse); responseMessage.To = connection.TheirDid; var forwardMessage = new ForwardEnvelopeMessage { Type = MessageUtils.FormatDidMessageType(connection.TheirDid, MessageTypes.Forward), Content = responseMessage.ToJson() }; await RouterService.ForwardAsync(forwardMessage, connection.Endpoint); }