using System; using Tapeti.Annotations; using Tapeti.Flow; using Tapeti.Flow.Annotations; // ReSharper disable UnusedMember.Global namespace Test { [MessageController] [DynamicQueue] public class FlowEndController { private readonly IFlowProvider flowProvider; public FlowEndController(IFlowProvider flowProvider) { this.flowProvider = flowProvider; } [Start] public IYieldPoint StartFlow(PingMessage message) { Console.WriteLine("PingMessage received, calling flowProvider.End() directly"); if (DateTime.Now < new DateTime(2000, 1, 1)) { //never true return flowProvider .YieldWithRequestSync (new PingConfirmationRequestMessage { StoredInState = "Ping:" }, HandlePingConfirmationResponse); } return Finish(); } [Continuation] public IYieldPoint HandlePingConfirmationResponse(PingConfirmationResponseMessage msg) { Console.WriteLine("Ending ping flow: " + msg.Answer); return Finish(); } private IYieldPoint Finish() { return flowProvider.End(); } public class PingMessage { } [Request(Response = typeof(PingConfirmationResponseMessage))] public class PingConfirmationRequestMessage { public string StoredInState { get; set; } } public class PingConfirmationResponseMessage { public string Answer { get; set; } } public PingConfirmationResponseMessage PingConfirmation(PingConfirmationRequestMessage message) { Console.WriteLine(">> receive Ping (returning pong)"); return new PingConfirmationResponseMessage { Answer = message.StoredInState + " Pong!" }; } } }