/// <summary> /// This method has two responsibilities. 'Dual responsiblity principle' - it'll be all the rage in a few years. /// 1) To convert a {MethodInfo,arguments[]} pair into an RpcRequest object. /// 2) To pass the request object to a message broker correctly. /// </summary> public static object Call(this IRpcMessageBroker messageBroker, MethodInfo methodInfo, object[] arguments) { var interfaceName = methodInfo.DeclaringType?.AssemblyQualifiedName; if (interfaceName == null) { throw new ContractMismatchException("Maybe loosen off on the reflection and generics a bit?"); } var request = new RpcRequest( Guid.NewGuid().ToString(), methodInfo.DeclaringType.AssemblyQualifiedName, methodInfo.GetRpcSignature(), arguments.Select(s_JsonSerializer.Serialize).ToArray()); var async = methodInfo.GetCustomAttributes(typeof(RpcNonBlockingAttribute), true).Any(); if (async) { messageBroker.BeginRequest(request, null); return(null); } var response = messageBroker.Send(request); if (methodInfo.ReturnType == typeof(void)) { return(null); } return(s_JsonSerializer.Deserialize(methodInfo.ReturnType, response.ReturnValue)); }
internal SingleConnectionRpcClient(IRpcMessageBroker messageBroker) { if (messageBroker == null) { throw new ArgumentNullException(nameof(messageBroker)); } m_MessageBroker = messageBroker; }
internal Connection( string connectionId, IRpcMessageBroker rpcMessageBroker, IEnumerable <IDisconnectReporter> disconnectReporters, IEnumerable <IDisposable> disposeChain) { m_Disposables = new List <IDisposable>(disposeChain); ConnectionId = connectionId; RpcMessageBroker = rpcMessageBroker; foreach (var reporter in disconnectReporters) { reporter.Disconnected += OnDisconnected; } }
public DuplexDelegateProvider(IDelegateCollection delegateCollection, IRpcMessageBroker rpcMessageBroker) { if (delegateCollection == null) { throw new ArgumentNullException(nameof(delegateCollection)); } if (rpcMessageBroker == null) { throw new ArgumentNullException(nameof(rpcMessageBroker)); } m_DelegateCollection = delegateCollection; m_RpcMessageBroker = rpcMessageBroker; }
public RpcResponseChannelMessageHandler( IRpcMessageBroker rpcMessageBroker, IRpcMessageEncoder messageEncoder) { if (rpcMessageBroker == null) { throw new ArgumentNullException(nameof(rpcMessageBroker)); } if (messageEncoder == null) { throw new ArgumentNullException(nameof(messageEncoder)); } m_RpcMessageBroker = rpcMessageBroker; m_MessageEncoder = messageEncoder; }