public async ValueTask <object> ReceiveAsync(CancellationToken cancellationToken) { var message = await _connection.ReceiveAsync(cancellationToken) .ConfigureAwait(false); if (message is not MessageData messageData) { throw new InvalidOperationException($"Received invalid message: {message.GetType().Name} is not a {typeof(MessageData).Name} type."); } var data = messageData.Data; var messageType = _messageTypeCache.GetTypeById(messageData.TypeId); var deserialized = _serializer.Deserialize(data, messageType); // TODO: Consider using MetadataFactory here (but set messageId to null, because it wasn't passed). // Probably best to implement CreateEmpty() method on MetadataFactory. if (messageData.Metadata == null) { messageData.Metadata = MessageMetadata.CreateEmpty(); } return(new MessageWithMetadata { Message = deserialized, Metadata = messageData.Metadata }); }
public void ShouldCreateEmpty() { var sut = MessageMetadata.CreateEmpty(); Assert.Null(sut.MessageId); Assert.Equal(DefaultAcknowledgementType, sut.AcknowledgementType); Assert.Null(sut.ResponseMessageTypeId); }
public void ShouldHaveFalseSendUpdateByDefault() { var sut = MessageMetadata.CreateEmpty(); Assert.False(sut.SendUpdate); sut = new MessageMetadata(); Assert.False(sut.SendUpdate); }
public void ShouldHaveHandledDefaultAcknowledgementType() { var sut = MessageMetadata.CreateEmpty(); Assert.Equal(AcknowledgementType.Handled, sut.AcknowledgementType); sut = new MessageMetadata(); Assert.Equal(AcknowledgementType.Handled, sut.AcknowledgementType); }
/// <summary> /// Gets metadata from object if it is <see cref="MessageWithMetadata"/>, /// otherwise returns empty <see cref="MessageMetadata"/>. /// </summary> public static MessageMetadata GetMetadataOrEmpty(this object message) { if (message is MessageWithMetadata messageWithMetadata && messageWithMetadata.Metadata != null) { return(messageWithMetadata.Metadata); } return(MessageMetadata.CreateEmpty()); }
public MessageMetadata CreateFor(object message) { var metadata = MessageMetadata.CreateEmpty(); metadata.MessageId = _messageIdFactory.CreateMessageId(); // Load any metadata from attributes here. // TODO: Cache types & attributes. var messageAttribute = message.GetType().GetCustomAttribute <MessageAttribute>(); if (messageAttribute != null) { metadata.SendUpdate = messageAttribute.SendUpdate; } return(metadata); }