public static IPublisher <TMessage> Publisher <TMessage>(ICommunication <TMessage> communication) where TMessage : IMessage { var awaiter = communication.CreateChannelAwaiter(); var requestAcceptor = new NewChannelRequestAcceptor(awaiter); var publisher = new Publisher <TMessage>(requestAcceptor, true); requestAcceptor.StartAcceptLoop(); return(publisher); }
public BusServer(ICommunication <TMessage> subscribersCommunication, ICommunication <TMessage> publishersCommunication) { var subscriptionChannelAwaiter = subscribersCommunication.CreateChannelAwaiter(); var subscriptionRequestAcceptor = new NewChannelRequestAcceptor(subscriptionChannelAwaiter); _publisher = new Publisher <TMessage>(subscriptionRequestAcceptor, true); subscriptionRequestAcceptor.StartAcceptLoop(); var publisherChannelAwaiter = publishersCommunication.CreateChannelAwaiter(); var publicationRequestAcceptor = new NewChannelRequestAcceptor(publisherChannelAwaiter); publicationRequestAcceptor.ClientAccepted += PublisherChannelAccepted; publicationRequestAcceptor.StartAcceptLoop(); }
public NewChannelRequestAcceptor Go() { _setupFinished = true; var awaiter = _communication.CreateChannelAwaiter(); var requestAcceptor = new NewChannelRequestAcceptor(awaiter); requestAcceptor.ClientAccepted += (sender, a) => { _newClientHandler?.Invoke(sender, a); var responder = new Responder <TMessage>((IChannel <TMessage>)a.Channel); responder.RequestReceived += (o, args) => { _requestHandler?.Invoke(o, args); }; responder.ChannelClosed += (o, args) => { _channelClosedHandler?.Invoke(o, args); ((IResponder <TMessage>)o).Channel.Dispose(); }; responder.StartResponding(); }; requestAcceptor.StartAcceptLoop(); return(requestAcceptor); }