Beispiel #1
0
            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);
            }
Beispiel #2
0
        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();
        }
Beispiel #3
0
                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);
                }