internal static IEntityDescriptor Create(MethodDescriptor methodDescriptor, IDispatcher dispatcher) { IEntityDescriptor result = null; if (dispatcher is OrleansDispatcher) { var orleanDispatcher = (OrleansDispatcher)dispatcher; //var guid = orleanDispatcher.GetGuidForMethod(methodDescriptor); // I think we should consult the dispatcher about an existing ID for the descriptor result = new OrleansEntityDescriptor(methodDescriptor); //System.Guid.NewGuid()); } else { result = new MethodEntityDescriptor(methodDescriptor); } return result; }
internal static async Task<IMethodEntityGrain> CreateMethodEntityGrain(OrleansEntityDescriptor grainDesc) { Logger.Instance.Log("OrleansDispatcher", "CreateMethodEntityGrain", grainDesc); var methodEntityGrain = MethodEntityGrainFactory.GetGrain(grainDesc.MethodDescriptor.ToString()); // check if the result is initialized var methodEntity = await methodEntityGrain.GetMethodEntity(); if (methodEntity == null) { Logger.Instance.Log("OrleansDispatcher", "CreateMethodEntityGrain", "MethodEntityGrain for {0} does not exist", grainDesc); Contract.Assert(grainDesc.MethodDescriptor != null); //// methodEntity = await providerGrain.CreateMethodEntityAsync(grainDesc.MethodDescriptor); methodEntity = await CreateMethodEntityUsingGrainsAsync(grainDesc.MethodDescriptor); Contract.Assert(methodEntity != null); await methodEntityGrain.SetMethodEntity(methodEntity, grainDesc); await methodEntityGrain.SetDescriptor(grainDesc); return methodEntityGrain; } else { Logger.Instance.Log("OrleansDispatcher", "CreateMethodEntityGrain", "MethodEntityGrain for {0} already exists", grainDesc); return methodEntityGrain; } }
//public async Task ReceiveMessageAsync(IEntityDescriptor source, // IMessage message, // IMethodEntityGrain destinationGrain) //{ // //await destinationGrain.ProcessMessaggeAsync(source, message,this); //} /// <summary> /// /// </summary> /// <returns></returns> public ImmutableHashSet<IEntity> GetAllEntites() { var result = new HashSet<IEntity>(); var solutionGrain = SolutionGrainFactory.GetGrain("Solution"); var methodDescriptors = solutionGrain.GetMethodDescriptors().Result; foreach (var methodDescriptor in methodDescriptors) { var orleansEnitityDesc = new OrleansEntityDescriptor(methodDescriptor); IMethodEntityGrain entity = (IMethodEntityGrain)GetEntityAsync(orleansEnitityDesc).Result; result.Add(entity); } return result.ToImmutableHashSet<IEntity>(); }
public ImmutableHashSet<IEntityDescriptor> GetAllEntitiesDescriptors() { var result = new HashSet<IEntityDescriptor>(); var solutionGrain = SolutionGrainFactory.GetGrain("Solution"); var methodDescriptors = solutionGrain.GetMethodDescriptors().Result; foreach (var methodDescriptor in methodDescriptors) { var orleansEnitityDesc = new OrleansEntityDescriptor(methodDescriptor); result.Add(orleansEnitityDesc); } return result.ToImmutableHashSet<IEntityDescriptor>(); }