Skip to content

Instantly share code, notes, and snippets.

View tomliversidge's full-sized avatar

Tom Liversidge tomliversidge

  • Tallinn, Estonia
View GitHub Profile
private Task AwaitingDebitConfirmation(IContext context)
{
switch (context.Message)
{
case OK _:
await _persistence.PersistEventAsync(new AccountDebited());
context.SpawnNamed(TryCredit(_to, +_amount), "CreditAttempt");
break;
//...
}
public async Task ReceiveAsync(IContext context)
{
switch (context.Message)
{
case Started msg:
_behavior.Become(Starting);
await _persistence.RecoverStateAsync();
break;
// ...
}
private void ApplyEvent(Event @event)
{
switch (@event.Data)
{
case TransferStarted msg:
_behavior.Become(AwaitingDebitConfirmation);
break;
case AccountDebited msg:
_behavior.Become(AwaitingCreditConfirmation);
break;
private void ApplyEvent(Event @event)
{
switch (@event.Data)
{
case TransferStarted msg:
_behavior.Become(AwaitingDebitConfirmation);
break;
// ... other transitions
}
}
private async Task Starting(IContext context)
{
if (context.Message is Started)
{
context.SpawnNamed(TryDebit(_from, -_amount), "DebitAttempt");
await _persistence.PersistEventAsync(new TransferStarted());
}
}
private Task Starting(IContext context)
{
if (context.Message is Started)
{
context.SpawnNamed(TryDebit(_from, -_amount), "DebitAttempt");
_behavior.Become(AwaitingDebitConfirmation);
}
}
case Refused _:
case Terminated _:
_logger.Log("Transfer status unknown. Escalate")
StopAll(context);
case OK _:
_logger.Log("Transfer failed. System consistent")
StopAll(context);
private async Task RollingBackDebit(IContext context)
{
switch (context.Message)
{
//...
case OK _:
_logger.Log("Transfer failed. System consistent")
StopAll(context);
break;
case Refused _:
case Terminated msg:
_logger.Log("Transfer status unknown. Escalate")
StopAll(context);