public
Created

  • Download Gist
RavenDbMessageModule.cs
C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
public class RavenDbMessageModule : IMessageModule
{
private readonly IDocumentStore documentStore;
 
[ThreadStatic]
private static IDocumentSession currentSession;
 
public static IDocumentSession CurrentSession
{
get { return currentSession; }
}
 
public RavenDbMessageModule(IDocumentStore documentStore)
{
this.documentStore = documentStore;
}
 
public void Init(ITransport transport, IServiceBus serviceBus)
{
transport.MessageArrived += TransportOnMessageArrived;
transport.MessageProcessingCompleted += TransportOnMessageProcessingCompleted;
}
 
public void Stop(ITransport transport, IServiceBus serviceBus)
{
transport.MessageArrived -= TransportOnMessageArrived;
transport.MessageProcessingCompleted -= TransportOnMessageProcessingCompleted;
}
 
private static void TransportOnMessageProcessingCompleted(CurrentMessageInformation currentMessageInformation, Exception exception)
{
if (currentSession != null)
{
if (exception == null)
currentSession.SaveChanges();
currentSession.Dispose();
}
currentSession = null;
}
 
private bool TransportOnMessageArrived(CurrentMessageInformation currentMessageInformation)
{
if (currentSession == null)
currentSession = documentStore.OpenSession();
return false;
}
}

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.