Skip to content

Instantly share code, notes, and snippets.

@ToJans
Created January 20, 2012 10:09
Show Gist options
  • Save ToJans/1646538 to your computer and use it in GitHub Desktop.
Save ToJans/1646538 to your computer and use it in GitHub Desktop.
public class ResourceGroup:AR
{
List<string> unprovisionedResources = new List<string>();
public void ProvisionGroup(string[] ResourceIds)
{
foreach (var id in ResourceIds)
{
Apply(new UnprovisionedResourceAllocated(this.Id, ResourceId));
}
}
public void ConfirmResourceProvision(string ResourceId)
{
Apply(new ResourceProvisionConfirmed(this.Id, ResourceId));
if (unprovisionedResources.Count == 0)
Apply(new ResourceGroupProvisioningCompleted(this.Id));
}
public void CheckProvisioningTimeout(string ResourceId)
{
if (unprovisionedResources.Contains(ResourceId))
Apply(new ResourceProvisioningFailed(this.Id,ResourceId));
}
public void Handle(UnprovisionedResourceAllocated e)
{
unprovisionedResources.Add(e.ResourceId);
}
public void Handle(ResourceProvisionConfirmed e)
{
unprovisionedResources.Remove(e.ResourceId);
}
}
public class ResourceProvisioningSaga
{
IResourceBackend backend;
IBus bus;
public ResourceProvisioningSaga(IResourceBackend backend,IBus bus)
{
this.backend = backend;
this.bus = bus;
}
public void Handle(UnprovisionedResourceAllocated e)
{
backend.AllocateProvisioning(e.ResourceId);
bus.Raise(CheckProvisioningTimeout(e.groupid, e.ResourceId), When = DateTime.UtcNow.AddMinutes(15));
}
public void Handle(MessageFromTheBackendThatProvisioningSucceeded e)
{
bus.Raise(new ConfirmResourceProvision(e.groupid, e.ResourceId));
}
public void Handle(ResourceGroupProvisioningCompleted e)
{
backend.SaveResourceGroup(e.xxx);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment