Example #1
0
        /// <summary>
        /// Converts this grain to a specific grain interface.
        /// </summary>
        /// <typeparam name="TGrainInterface">The type of the grain interface.</typeparam>
        /// <param name="grain">The grain to convert.</param>
        /// <returns>A strongly typed <c>GrainReference</c> of grain interface type TGrainInterface.</returns>
        public static TGrainInterface AsReference <TGrainInterface>(this IAddressable grain)
        {
            ThrowIfNullGrain(grain);
            var grainReference = grain.AsReference();

            return((TGrainInterface)grainReference.Runtime.Cast(grain, typeof(TGrainInterface)));
        }
Example #2
0
        public void CastAsyncGrainRefCastFromSelf()
        {
            IAddressable grain = GrainClient.GrainFactory.GetGrain <ISimpleGrain>(random.Next(), SimpleGrain.SimpleGrainNamePrefix);;
            ISimpleGrain cast  = grain.AsReference <ISimpleGrain>();

            Task <int> successfulCallPromise = cast.GetA();

            successfulCallPromise.Wait();
            Assert.Equal(TaskStatus.RanToCompletion, successfulCallPromise.Status);
        }
Example #3
0
        public void CastGrainRefCastFromMyTypePolymorphic()
        {
            // MultifacetTestGrain implements IMultifacetReader
            // MultifacetTestGrain implements IMultifacetWriter
            IAddressable grain = GrainClient.GrainFactory.GetGrain <IMultifacetTestGrain>(0);

            Assert.IsAssignableFrom <IMultifacetWriter>(grain);
            Assert.IsAssignableFrom <IMultifacetReader>(grain);

            IAddressable cast = grain.AsReference <IMultifacetReader>();

            Assert.IsAssignableFrom(grain.GetType(), cast);
            Assert.IsAssignableFrom <IMultifacetWriter>(cast);
            Assert.IsAssignableFrom <IMultifacetReader>(grain);

            IAddressable cast2 = grain.AsReference <IMultifacetWriter>();

            Assert.IsAssignableFrom(grain.GetType(), cast2);
            Assert.IsAssignableFrom <IMultifacetReader>(cast2);
            Assert.IsAssignableFrom <IMultifacetWriter>(grain);
        }
        public void CastGrainRefCastFromMyTypePolymorphic()
        {
            // MultifacetTestGrain implements IMultifacetReader
            // MultifacetTestGrain implements IMultifacetWriter
            IAddressable grain = GrainClient.GrainFactory.GetGrain <IMultifacetTestGrain>(0);

            Assert.IsInstanceOfType(grain, typeof(IMultifacetWriter));
            Assert.IsInstanceOfType(grain, typeof(IMultifacetReader));

            IAddressable cast = grain.AsReference <IMultifacetReader>();

            Assert.IsInstanceOfType(cast, grain.GetType());
            Assert.IsInstanceOfType(cast, typeof(IMultifacetWriter));
            Assert.IsInstanceOfType(grain, typeof(IMultifacetReader));

            IAddressable cast2 = grain.AsReference <IMultifacetReader>();

            Assert.IsInstanceOfType(cast2, grain.GetType());
            Assert.IsInstanceOfType(cast2, typeof(IMultifacetReader));
            Assert.IsInstanceOfType(grain, typeof(IMultifacetWriter));
        }
Example #5
0
        public bool RemoveConsumer(IAddressable consumerAddress)
        {
            StreamConsumerData consumer;
            var consumerReference = consumerAddress.AsReference();

            if (!queueData.TryGetValue(consumerReference, out consumer))
            {
                return(false);
            }

            consumer.Cursor = null; // kill cursor activity and ensure it does not start again on this consumer data.
            return(queueData.Remove(consumerReference));
        }
Example #6
0
        public Task<Tuple<TExtension, TExtensionInterface>> BindExtension<TExtension, TExtensionInterface>(Func<TExtension> newExtensionFunc)
            where TExtension : IGrainExtension
            where TExtensionInterface : IGrainExtension
        {
            TExtension extension;
            if (!TryGetExtensionHandler(out extension))
            {
                extension = newExtensionFunc();
                if (!TryAddExtension(extension))
                    throw new OrleansException("Failed to register " + typeof(TExtension).Name);
            }

            IAddressable currentGrain = this.CurrentActivationData.GrainInstance;
            var currentTypedGrain = currentGrain.AsReference<TExtensionInterface>();

            return Task.FromResult(Tuple.Create(extension, currentTypedGrain));
        }
        public Task <Tuple <TExtension, TExtensionInterface> > BindExtension <TExtension, TExtensionInterface>(Func <TExtension> newExtensionFunc)
            where TExtension : IGrainExtension
            where TExtensionInterface : IGrainExtension
        {
            if (RuntimeContext.Current == null)
            {
                return(this.HostedClient.BindExtension <TExtension, TExtensionInterface>(newExtensionFunc));
            }

            if (!TryGetExtensionHandler(out TExtension extension))
            {
                extension = newExtensionFunc();
                if (!TryAddExtension(extension))
                {
                    throw new OrleansException("Failed to register " + typeof(TExtension).Name);
                }
            }

            IAddressable currentGrain      = (RuntimeContext.CurrentActivationContext as SchedulingContext)?.Activation.GrainInstance;
            var          currentTypedGrain = currentGrain.AsReference <TExtensionInterface>();

            return(Task.FromResult(Tuple.Create(extension, currentTypedGrain)));
        }
Example #8
0
 public bool TryGetConsumer(IAddressable consumer, out StreamConsumerData data)
 {
     return(queueData.TryGetValue(consumer.AsReference(), out data));
 }
Example #9
0
 public bool Contains(IAddressable consumer)
 {
     return(queueData.ContainsKey(consumer.AsReference()));
 }
Example #10
0
 /// <summary>
 /// Casts a grain to a specific grain interface.
 /// </summary>
 /// <typeparam name="TGrainInterface">The type of the grain interface.</typeparam>
 /// <param name="grain">The grain to cast.</param>
 public static TGrainInterface Cast <TGrainInterface>(this IAddressable grain)
 {
     return(grain.AsReference <TGrainInterface>());
 }
Example #11
0
 /// <summary>
 /// Returns a typed reference to the provided grain.
 /// </summary>
 /// <param name="grain">The grain to convert.</param>
 /// <param name="interfaceType">The type of the grain interface.</param>
 /// <remarks>
 /// If the provided value is a grain instance, this will create a reference which implements the provided interface.
 /// If the provided value is already grain reference, this will create a new reference which implements the provided interface.
 /// </remarks>
 /// <returns>A strongly typed reference to the provided grain which implements <paramref name="interfaceType"/>.</returns>
 public static object AsReference(this IAddressable grain, Type interfaceType) => grain.AsReference().Runtime.Cast(grain, interfaceType);
Example #12
0
 /// <summary>
 /// Returns a typed reference to the provided grain.
 /// </summary>
 /// <typeparam name="TGrainInterface">The type of the grain interface.</typeparam>
 /// <param name="grain">The grain to convert.</param>
 /// <remarks>
 /// This method is equivalent to <see cref="AsReference{TGrainInterface}"/>.
 /// If the provided value is a grain instance, this will create a reference which implements the provided interface.
 /// If the provided value is already grain reference, this will create a new reference which implements the provided interface.
 /// </remarks>
 /// <returns>A strongly typed reference to the provided grain which implements <typeparamref name="TGrainInterface"/>.</returns>
 public static TGrainInterface Cast <TGrainInterface>(this IAddressable grain) => grain.AsReference <TGrainInterface>();
Example #13
0
 /// <summary>
 /// Casts the provided <paramref name="grain"/> to the provided <paramref name="interfaceType"/>.
 /// </summary>
 /// <param name="grain">The grain.</param>
 /// <param name="interfaceType">The resulting interface type.</param>
 /// <returns>A reference to <paramref name="grain"/> which implements <paramref name="interfaceType"/>.</returns>
 public static object Cast(this IAddressable grain, Type interfaceType)
 {
     return(grain.AsReference().Runtime.Cast(grain, interfaceType));
 }