public async static System.Threading.Tasks.Task <IPlayerObserver> CreateObjectReference(IPlayerObserver obj)
 {
     if (methodInvoker == null)
     {
         methodInvoker = new PlayerObserverMethodInvoker();
     }
     return(PlayerObserverFactory.Cast(await GrainReference.CreateObjectReference(obj, methodInvoker)));
 }
Exemple #2
0
 public async static System.Threading.Tasks.Task <IObserve> CreateObjectReference(IObserve obj)
 {
     if (methodInvoker == null)
     {
         methodInvoker = new ObserveMethodInvoker();
     }
     return(ObserveFactory.Cast(await GrainReference.CreateObjectReference(obj, methodInvoker)));
 }
Exemple #3
0
        private Task <TGrainObserverInterface> CreateObjectReferenceImpl <TGrainObserverInterface>(IAddressable obj)
        {
            var interfaceType     = typeof(TGrainObserverInterface);
            var interfaceTypeInfo = interfaceType.GetTypeInfo();

            if (!interfaceTypeInfo.IsInterface)
            {
                throw new ArgumentException(
                          string.Format(
                              "The provided type parameter must be an interface. '{0}' is not an interface.",
                              interfaceTypeInfo.FullName));
            }

            if (!interfaceTypeInfo.IsInstanceOfType(obj))
            {
                throw new ArgumentException(
                          string.Format("The provided object must implement '{0}'.", interfaceTypeInfo.FullName),
                          "obj");
            }

            IGrainMethodInvoker invoker;

            if (!this.invokers.TryGetValue(interfaceType, out invoker))
            {
                invoker = MakeInvoker(interfaceType);
                if (invoker != null)
                {
                    this.invokers.TryAdd(interfaceType, invoker);
                }
            }

            if (invoker == null)
            {
                throw new InvalidOperationException(
                          string.Format(
                              "Cannot find generated IMethodInvoker implementation for interface '{0}'",
                              interfaceType));
            }

            return
                (GrainReference.CreateObjectReference(obj, invoker)
                 .ContinueWith(result => this.Cast <TGrainObserverInterface>(result.GetAwaiter().GetResult())));
        }