40 lines
1.1 KiB
C#
40 lines
1.1 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using Tapeti.Config;
|
|
|
|
namespace Tapeti.Flow.Default
|
|
{
|
|
internal class FlowContext : IDisposable
|
|
{
|
|
public IMessageContext MessageContext { get; set; }
|
|
public IFlowStateLock FlowStateLock { get; set; }
|
|
public FlowState FlowState { get; set; }
|
|
|
|
public Guid ContinuationID { get; set; }
|
|
public ContinuationMetadata ContinuationMetadata { get; set; }
|
|
|
|
private bool stored;
|
|
|
|
|
|
public async Task EnsureStored()
|
|
{
|
|
if (stored)
|
|
return;
|
|
|
|
if (MessageContext == null) throw new ArgumentNullException(nameof(MessageContext));
|
|
if (FlowState == null) throw new ArgumentNullException(nameof(FlowState));
|
|
if (FlowStateLock == null) throw new ArgumentNullException(nameof(FlowStateLock));
|
|
|
|
FlowState.Data = Newtonsoft.Json.JsonConvert.SerializeObject(MessageContext.Controller);
|
|
await FlowStateLock.StoreFlowState(FlowState);
|
|
|
|
stored = true;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
FlowStateLock?.Dispose();
|
|
}
|
|
}
|
|
}
|