public RpcClientServer(ITopologyLoader topologyLoader, TimeoutSettings defaultTimeout, ISettingsLoader settingsLoader, RpcComponentOverrides componentOverrides = null) { topology = topologyLoader.Load(); this.defaultTimeout = defaultTimeout; settings = settingsLoader.LoadHostSettings(); var componentContainer = new RpcClientServerComponentContainer(this, componentOverrides ?? new RpcComponentOverrides()); logger = componentContainer.GetLogger(); serviceImplementationContainer = componentContainer.GetServiceImplementationContainer(); requestReceiver = componentContainer.GetRequestReceiverContainer().GetReceiver(settings.EndPoint.Protocol); serviceProxyContainer = componentContainer.GetIServiceProxyContainer(); }
public Client(IMessageConnection client, ISerializer serializer) { _report = ReportFactory.GetReporter(SystemGuidLoader.LoadOrCreateOrEmpty(), Guid.NewGuid(), "FuseProtocol"); _client = client; var messagesOut = client.OutgoingMessages.Serialized(serializer); // TODO: Find a way to either log or do something about parse errors. var messagesIn = client.IncomingMessages.TryDeserialize(serializer, _report); messagesIn.Subscribe(a => { }, () => _connectionLost.OnNext(DateTime.Now)); _requestSender = new RequestSender(_report, messagesIn, messagesOut); _receiver = new RequestReceiver(_report, messagesIn.OfType <IRequestMessage <UnresolvedMessagePayload> >(), messagesOut); _eventBroadcaster = Observer.Create <IEventData>(e => messagesOut.OnNext(Event.Create(e))); _broadcastedEvents = messagesIn.OfType <IEventMessage <UnresolvedMessagePayload> >(); }