private static ImmutableDictionary <GrainInterfaceType, GrainInterfaceProperties> CreateInterfaceManifest( IEnumerable <IGrainInterfacePropertiesProvider> propertyProviders, IOptions <GrainTypeOptions> grainTypeOptions, GrainInterfaceTypeResolver interfgaceTypeResolver) { var builder = ImmutableDictionary.CreateBuilder <GrainInterfaceType, GrainInterfaceProperties>(); foreach (var grainInterface in grainTypeOptions.Value.Interfaces) { var interfaceId = interfgaceTypeResolver.GetGrainInterfaceType(grainInterface); var properties = new Dictionary <string, string>(); foreach (var provider in propertyProviders) { provider.Populate(grainInterface, interfaceId, properties); } var result = new GrainInterfaceProperties(properties.ToImmutableDictionary()); if (builder.ContainsKey(interfaceId)) { throw new InvalidOperationException($"An entry with the key {interfaceId} is already present." + $"\nExisting: {builder[interfaceId].ToDetailedString()}\nTrying to add: {result.ToDetailedString()}" + "\nConsider using the [GrainInterfaceType(\"name\")] attribute to give these interfaces unique names."); } builder.Add(interfaceId, result); } return(builder.ToImmutable()); }
public ClientManifestProvider( IEnumerable <IGrainPropertiesProvider> grainPropertiesProviders, IEnumerable <IGrainInterfacePropertiesProvider> grainInterfacePropertiesProviders, IOptions <GrainTypeOptions> grainTypeOptions, GrainTypeResolver grainTypeResolver, GrainInterfaceTypeResolver interfaceTypeResolver) { var grainProperties = CreateGrainManifest(grainPropertiesProviders, grainTypeOptions, grainTypeResolver); var interfaces = CreateInterfaceManifest(grainInterfacePropertiesProviders, grainTypeOptions, interfaceTypeResolver); this.ClientManifest = new GrainManifest(grainProperties, interfaces); }
public ClientManifestProvider( IEnumerable <IGrainPropertiesProvider> grainPropertiesProviders, IEnumerable <IGrainInterfacePropertiesProvider> grainInterfacePropertiesProviders, IApplicationPartManager applicationPartManager, GrainTypeResolver grainTypeResolver, GrainInterfaceTypeResolver interfaceTypeResolver) { var grainProperties = CreateGrainManifest(grainPropertiesProviders, applicationPartManager, grainTypeResolver); var interfaces = CreateInterfaceManifest(grainInterfacePropertiesProviders, applicationPartManager, interfaceTypeResolver); this.ClientManifest = new GrainManifest(grainProperties, interfaces); }
public GrainReferenceRuntime( IRuntimeClient runtimeClient, IGrainCancellationTokenRuntime cancellationTokenRuntime, IEnumerable <IOutgoingGrainCallFilter> outgoingCallFilters, GrainReferenceActivator referenceActivator, GrainInterfaceTypeResolver interfaceTypeResolver) { this.RuntimeClient = runtimeClient; this.cancellationTokenRuntime = cancellationTokenRuntime; this.referenceActivator = referenceActivator; this.interfaceTypeResolver = interfaceTypeResolver; this.filters = outgoingCallFilters.ToArray(); this.sendRequest = (GrainReference reference, IResponseCompletionSource callback, IInvokable body, InvokeMethodOptions options) => RuntimeClient.SendRequest(reference, body, callback, options); }
public GrainReferenceRuntime( IRuntimeClient runtimeClient, IGrainCancellationTokenRuntime cancellationTokenRuntime, IEnumerable <IOutgoingGrainCallFilter> outgoingCallFilters, GrainReferenceActivator referenceActivator, GrainInterfaceTypeResolver interfaceTypeResolver, DeepCopier deepCopier) { this.RuntimeClient = runtimeClient; this.cancellationTokenRuntime = cancellationTokenRuntime; this.referenceActivator = referenceActivator; this.interfaceTypeResolver = interfaceTypeResolver; this.filters = outgoingCallFilters.ToArray(); this.sendRequest = this.SendRequest; this.deepCopier = deepCopier; }
public InsideRuntimeClient( ILocalSiloDetails siloDetails, TypeMetadataCache typeMetadataCache, OrleansTaskScheduler scheduler, IServiceProvider serviceProvider, MessageFactory messageFactory, ITransactionAgent transactionAgent, ILoggerFactory loggerFactory, IOptions <SiloMessagingOptions> messagingOptions, ApplicationRequestsStatisticsGroup appRequestStatistics, MessagingTrace messagingTrace, GrainReferenceActivator referenceActivator, GrainInterfaceTypeResolver interfaceIdResolver, GrainInterfaceTypeToGrainTypeResolver interfaceToTypeResolver, ImrGrainMethodInvokerProvider invokers) { this.ServiceProvider = serviceProvider; this.MySilo = siloDetails.SiloAddress; this.disposables = new List <IDisposable>(); this.callbacks = new ConcurrentDictionary <CorrelationId, CallbackData>(); this.messageFactory = messageFactory; this.transactionAgent = transactionAgent; this.Scheduler = scheduler; this.ConcreteGrainFactory = new GrainFactory(this, typeMetadataCache, referenceActivator, interfaceIdResolver, interfaceToTypeResolver); this.logger = loggerFactory.CreateLogger <InsideRuntimeClient>(); this.invokeExceptionLogger = loggerFactory.CreateLogger($"{typeof(Grain).FullName}.InvokeException"); this.loggerFactory = loggerFactory; this.messagingOptions = messagingOptions.Value; this.appRequestStatistics = appRequestStatistics; this.messagingTrace = messagingTrace; this.invokers = invokers; this.sharedCallbackData = new SharedCallbackData( msg => this.UnregisterCallback(msg.Id), this.loggerFactory.CreateLogger <CallbackData>(), this.messagingOptions, this.appRequestStatistics, this.messagingOptions.ResponseTimeout); this.systemSharedCallbackData = new SharedCallbackData( msg => this.UnregisterCallback(msg.Id), this.loggerFactory.CreateLogger <CallbackData>(), this.messagingOptions, this.appRequestStatistics, this.messagingOptions.SystemResponseTimeout); }
public GrainReferenceRuntime( IRuntimeClient runtimeClient, IGrainCancellationTokenRuntime cancellationTokenRuntime, SerializationManager serializationManager, IEnumerable <IOutgoingGrainCallFilter> outgoingCallFilters, GrainReferenceActivator referenceActivator, GrainInterfaceTypeResolver interfaceTypeResolver) { this.grainReferenceMethodCache = new InterfaceToImplementationMappingCache(); this.sendRequestDelegate = SendRequest; this.RuntimeClient = runtimeClient; this.cancellationTokenRuntime = cancellationTokenRuntime; this.serializationManager = serializationManager; this.referenceActivator = referenceActivator; this.interfaceTypeResolver = interfaceTypeResolver; this.filters = outgoingCallFilters.ToArray(); }