Created
January 20, 2012 10:09
-
-
Save ToJans/1646538 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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