Exemplo n.º 1
0
        /// <summary>
        /// Creates a new proxy instance that implements the given type <typeparamref name="T"/>
        /// of the given id.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="endPoint"></param>
        /// <param name="channel"></param>
        /// <param name="objectId"></param>
        /// <returns></returns>
        public T CreateProxy <T>(IRemotingEndPoint endPoint, IEndPointChannel channel, ulong objectId)
        {
            var proxyType = GenerateProxy <T>();

            ConstructorInfo ctor = proxyType.GetConstructor(new[]
            {
                typeof(ulong),
                typeof(IRemotingEndPoint),
                typeof(IEndPointChannel),
                typeof(ISerializer)
            });

            if (ctor == null)
            {
                throw new Exception();
            }

            return((T)ctor.Invoke(new object[]
            {
                objectId,
                endPoint,
                channel,
                _serializer
            }));
        }
Exemplo n.º 2
0
        public IServant CreateServant <T>(IRemotingEndPoint endPoint, IEndPointChannel channel, ulong objectId, T subject)
        {
            var interfaceType = typeof(T);
            var subjectType   = GenerateServant <T>();

            ConstructorInfo ctor = subjectType.GetConstructor(new[]
            {
                typeof(ulong),
                typeof(IRemotingEndPoint),
                typeof(IEndPointChannel),
                typeof(ISerializer),
                interfaceType
            });

            if (ctor == null)
            {
                throw new NotImplementedException(string.Format("Could not find ctor of servant for type '{0}'", interfaceType));
            }

            return((IServant)ctor.Invoke(new object[]
            {
                objectId,
                endPoint,
                channel,
                _serializer,
                subject
            }));
        }
Exemplo n.º 3
0
 public void Setup()
 {
     _remotingEndPoint = new Mock <IRemotingEndPoint>().Object;
     _endPointChannel  = new Mock <IEndPointChannel>().Object;
     _idGenerator      = new GrainIdGenerator(EndPointType.Client);
     _codeGenerator    = new Mock <ICodeGenerator>().Object;
 }
Exemplo n.º 4
0
        public void TestFixtureSetUp()
        {
            var seed = (int)DateTime.Now.Ticks;

            _random = new Random(seed);

            var endPoint = new Mock <IRemotingEndPoint>();

            _endPoint = endPoint.Object;

            var channel = new Mock <IEndPointChannel>();

            _channel = channel.Object;

            _proxyCreator   = new RemotingProxyCreator();
            _servantCreator = new ServantCreator();

            channel.Setup(
                x => x.CallRemoteMethod(It.IsAny <ulong>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <MemoryStream>()))
            .Returns((ulong objectId, string interfaceName, string methodName, Stream arguments) =>
            {
                if (objectId != _servant.ObjectId)
                {
                    throw new NoSuchServantException(objectId);
                }

                BinaryReader reader = arguments != null ? new BinaryReader(arguments) : null;
                var ret             = new MemoryStream();
                var writer          = new BinaryWriter(ret);

                _servant.Invoke(methodName, reader, writer);
                ret.Position = 0;
                return(ret);
            });
        }
Exemplo n.º 5
0
        public ServantStorage(IRemotingEndPoint remotingEndPoint,
                              IEndPointChannel endPointChannel,
                              GrainIdGenerator idGenerator,
                              ICodeGenerator codeGenerator)
        {
            if (remotingEndPoint == null)
            {
                throw new ArgumentNullException(nameof(remotingEndPoint));
            }
            if (endPointChannel == null)
            {
                throw new ArgumentNullException(nameof(endPointChannel));
            }
            if (idGenerator == null)
            {
                throw new ArgumentNullException(nameof(idGenerator));
            }
            if (codeGenerator == null)
            {
                throw new ArgumentNullException(nameof(codeGenerator));
            }

            _remotingEndPoint  = remotingEndPoint;
            _endPointChannel   = endPointChannel;
            _idGenerator       = idGenerator;
            _codeGenerator     = codeGenerator;
            _syncRoot          = new object();
            _servantsById      = new Dictionary <ulong, IServant>();
            _servantsBySubject = new WeakKeyDictionary <object, IServant>();
        }
Exemplo n.º 6
0
        private T CreateProxy <T>(IRemotingEndPoint endPoint, IEndPointChannel channel, ulong objectId) where T : class
        {
            var obj   = new Mock <T>();
            var proxy = obj.As <IProxy>();

            proxy.Setup(x => x.EndPoint).Returns(endPoint);
            proxy.Setup(x => x.InterfaceType).Returns(typeof(T));
            proxy.Setup(x => x.ObjectId).Returns(objectId);

            return(obj.Object);
        }
Exemplo n.º 7
0
        public ProxyStorage(IRemotingEndPoint remotingEndPoint,
                            IEndPointChannel endPointChannel,
                            ICodeGenerator codeGenerator)
        {
            if (remotingEndPoint == null)
            {
                throw new ArgumentNullException(nameof(remotingEndPoint));
            }
            if (endPointChannel == null)
            {
                throw new ArgumentNullException(nameof(endPointChannel));
            }
            if (codeGenerator == null)
            {
                throw new ArgumentNullException(nameof(codeGenerator));
            }

            _remotingEndPoint = remotingEndPoint;
            _endPointChannel  = endPointChannel;
            _codeGenerator    = codeGenerator;
            _syncRoot         = new object();
            _proxiesById      = new Dictionary <ulong, WeakReference <IProxy> >();
        }
Exemplo n.º 8
0
 /// <inheritdoc />
 public T CreateProxy <T>(IRemotingEndPoint endPoint, IEndPointChannel channel, ulong objectId)
 {
     return(_proxyCreator.CreateProxy <T>(endPoint, channel, objectId));
 }
Exemplo n.º 9
0
 /// <inheritdoc />
 public IServant CreateServant <T>(IRemotingEndPoint endPoint, IEndPointChannel channel, ulong objectId, T subject)
 {
     return(_servantCreator.CreateServant(endPoint, channel, objectId, subject));
 }