private async void ReceiveMessageEntity( MessageEntity messageEntity, Function messageCallback, CancellationToken token) { Logger.Debug($"Received message FROM {Table} WHERE {Filter}"); using (Stream stream = await messageEntity.RetrieveMessageBody(Registry.Instance.MessageBodyStore)) { if (stream == null) { Logger.Error($"MessageBody cannot be retrieved for EbmsMessageId: {messageEntity.EbmsMessageId}"); } else if (messageEntity.ContentType == null) { Logger.Error($"ContentType cannot be found for EbmsMessageId: {messageEntity.EbmsMessageId}"); } else { ReceivedEntityMessage receivedMessage = null; try { receivedMessage = new ReceivedEntityMessage(messageEntity, stream, messageEntity.ContentType); await messageCallback(receivedMessage, token).ConfigureAwait(false); } finally { receivedMessage?.UnderlyingStream.Dispose(); } } } }
private static async Task <UserMessage> RetrieveRelatedUserMessage(SignalMessage signalMessage) { using (var db = Registry.Instance.CreateDatastoreContext()) { UserMessage userMessage = null; MessageEntity ent = db.InMessages.FirstOrDefault( m => m.EbmsMessageId == signalMessage.RefToMessageId && m.EbmsMessageType == MessageType.UserMessage); if (ent == null) { ent = db.OutMessages.FirstOrDefault( m => m.EbmsMessageId == signalMessage.RefToMessageId && m.EbmsMessageType == MessageType.UserMessage); } if (ent != null) { using (var stream = await ent.RetrieveMessageBody(Registry.Instance.MessageBodyStore)) { stream.Position = 0; var s = SerializerProvider.Default.Get(ent.ContentType); var result = await s.DeserializeAsync(stream, ent.ContentType); if (result != null) { userMessage = result.UserMessages.FirstOrDefault(m => m.MessageId == signalMessage.RefToMessageId); } } } return(userMessage); } }