/// <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 })); }
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 })); }
public void Setup() { _remotingEndPoint = new Mock <IRemotingEndPoint>().Object; _endPointChannel = new Mock <IEndPointChannel>().Object; _idGenerator = new GrainIdGenerator(EndPointType.Client); _codeGenerator = new Mock <ICodeGenerator>().Object; }
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); }); }
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>(); }
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); }
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> >(); }
/// <inheritdoc /> public T CreateProxy <T>(IRemotingEndPoint endPoint, IEndPointChannel channel, ulong objectId) { return(_proxyCreator.CreateProxy <T>(endPoint, channel, objectId)); }
/// <inheritdoc /> public IServant CreateServant <T>(IRemotingEndPoint endPoint, IEndPointChannel channel, ulong objectId, T subject) { return(_servantCreator.CreateServant(endPoint, channel, objectId, subject)); }