Exemple #1
0
        public static void Main()
        {
            Console.WriteLine("Subscribing to " + Channel + " on stream Id " + StreamID);

            var ctx = new Aeron.Context()
                      .AvailableImageHandler(SamplesUtil.PrintUnavailableImage)
                      .UnavailableImageHandler(SamplesUtil.PrintUnavailableImage);

            var reporter          = new RateReporter(1000, SamplesUtil.PrintRate);
            var fragmentAssembler = new FragmentAssembler(SamplesUtil.RateReporterHandler(reporter));
            var running           = new AtomicBoolean(true);

            var t      = new Thread(subscription => SamplesUtil.SubscriberLoop(fragmentAssembler.OnFragment, FragmentCountLimit, running)((Subscription)subscription));
            var report = new Thread(reporter.Run);

            using (var aeron = Aeron.Connect(ctx))
                using (var subscription = aeron.AddSubscription(Channel, StreamID))
                {
                    t.Start(subscription);
                    report.Start();

                    Console.ReadLine();
                    Console.WriteLine("Shutting down...");
                    running.Set(false);
                    reporter.Halt();

                    t.Join();
                    report.Join();
                }
        }
Exemple #2
0
        public static void Main()
        {
            Console.WriteLine("Subscribing to " + Channel + " on stream Id " + StreamID);

            var ctx = new Aeron.Context()
                .AvailableImageHandler(SamplesUtil.PrintUnavailableImage)
                .UnavailableImageHandler(SamplesUtil.PrintUnavailableImage);

            var reporter = new RateReporter(1000, SamplesUtil.PrintRate);
            var fragmentAssembler = new FragmentAssembler(SamplesUtil.RateReporterHandler(reporter));
            var running = new AtomicBoolean(true);

            var t = new Thread(subscription => SamplesUtil.SubscriberLoop(fragmentAssembler.OnFragment, FragmentCountLimit, running)((Subscription) subscription));
            var report = new Thread(reporter.Run);

            using (var aeron = Aeron.Connect(ctx))
            using (var subscription = aeron.AddSubscription(Channel, StreamID))
            {
                t.Start(subscription);
                report.Start();

                Console.ReadLine();
                Console.WriteLine("Shutting down...");
                running.Set(false);
                reporter.Halt();

                t.Join();
                report.Join();
            }
        }
Exemple #3
0
        public void Start(DataHandler dataHandler)
        {
            if (Interlocked.CompareExchange(ref _isRunning, 1, 0) == 0)
            {
                _log.InfoFormat("Starting transport for channel [{0}] and stream [{1}]", _channel, _stream);
                var fragmentAssembler = new FragmentAssembler(
                    (buffer, offset, length, _) =>
                {
                    var data = new byte[length];
                    buffer.GetBytes(offset, data);
                    dataHandler(data, length);
                }
                    );

                //will block until stopped
                while (_isRunning == 1)
                {
                    var fragmentsRead = _subscription.Poll(fragmentAssembler.OnFragment, _fragmentLimit);
                    _idleStrategy.Idle(fragmentsRead);
                }

                _log.InfoFormat("Stopped transport for channel [{0}] and stream [{1}]", _channel, _stream);
            }
            else
            {
                var message = string.Format(
                    "Cannot start transport for channel [{0}] and stream [{1}]; transport is already active",
                    _channel,
                    _stream
                    );
                _log.Warn(message);
                throw new InvalidOperationException(message);
            }
        }
Exemple #4
0
 public EgressAdapter(IEgressListener listener, Subscription subscription, int fragmentLimit)
 {
     _fragmentAssembler = new FragmentAssembler(this);
     _listener          = listener;
     _subscription      = subscription;
     _fragmentLimit     = fragmentLimit;
 }
        private void RunLoop(Subscription sub, Publication pub)
        {
            var buffer = new UnsafeBuffer(BufferUtil.AllocateDirectAligned(2048, 16));

            var random = new Random();

            while (true)
            {
                if (pub.IsConnected)
                {
                    if (SendMessage(pub, buffer, "HELLO " + this.local_address.Port))
                    {
                        break;
                    }
                }
            }

            var assembler = new FragmentAssembler(OnParseMessage);

            while (true)
            {
                if (pub.IsConnected)
                {
                    SendMessage(pub, buffer, random.Next(0, int.MaxValue).ToString());
                }
                if (sub.IsConnected)
                {
                    sub.Poll(assembler, 10);
                }
                Thread.Sleep(1000);
            }
        }
Exemple #6
0
        public AeronSubscription(Subscription subscription)
        {
            _subscription = subscription;


            // dataHandler method is called for every new datagram received

            _fragmentReassembler = new FragmentAssembler(HandlerHelper.ToFragmentHandler(CompleteMessageReceived));
        }
        private void PollThread()
        {
            var idleStrategy    = _config.ClientIdleStrategy.GetClientIdleStrategy();
            var fragmentHandler = new FragmentAssembler(HandlerHelper.ToFragmentHandler(SubscriptionHandler));

            while (_isRunning && !_isTerminating)
            {
                idleStrategy.Idle(_subscription.Poll(fragmentHandler, _frameCountLimit));
            }
        }
Exemple #8
0
        public void SetUp()
        {
            delegateFragmentHandler = A.Fake <FragmentHandler>();
            termBuffer = A.Fake <IDirectBuffer>();
            adapter    = new FragmentAssembler(delegateFragmentHandler);
            header     = A.Fake <Header>(x => x.Wrapping(new Header(INITIAL_TERM_ID, LogBufferDescriptor.TERM_MIN_LENGTH)));

            header.SetBuffer(termBuffer, 0);

            A.CallTo(() => termBuffer.GetInt(A <int> ._)).Returns(SESSION_ID);
        }
Exemple #9
0
        public void SetUp()
        {
            delegateFragmentHandler = A.Fake<FragmentHandler>();
            termBuffer = A.Fake<IDirectBuffer>();
            adapter = new FragmentAssembler(delegateFragmentHandler);
            header = A.Fake<Header>(x => x.Wrapping(new Header(INITIAL_TERM_ID, LogBufferDescriptor.TERM_MIN_LENGTH)));

            header.SetBuffer(termBuffer, 0);

            A.CallTo(() => termBuffer.GetInt(A<int>._)).Returns(SESSION_ID);
        }
        private void RunLoop(Subscription sub)
        {
            var assembler = new FragmentAssembler(OnParseMessage);

            while (true)
            {
                if (sub.IsConnected)
                {
                    sub.Poll(assembler, 10);
                }
                Thread.Sleep(100);
            }
        }
Exemple #11
0
        private AeronCluster(Context ctx)
        {
            _ctx = ctx;


            Subscription subscription = null;

            try
            {
                ctx.Conclude();

                _aeron        = ctx.Aeron();
                _idleStrategy = ctx.IdleStrategy();
                _nanoClock    = _aeron.Ctx().NanoClock();
                _isUnicast    = ctx.ClusterMemberEndpoints() != null;
                UpdateMemberEndpoints(ctx.ClusterMemberEndpoints());

                subscription  = _aeron.AddSubscription(ctx.EgressChannel(), ctx.EgressStreamId());
                _subscription = subscription;

                _publication      = ConnectToCluster();
                _clusterSessionId = OpenSession();

                UnsafeBuffer headerBuffer = new UnsafeBuffer(new byte[SessionDecorator.SESSION_HEADER_LENGTH]);
                _sessionHeaderEncoder
                .WrapAndApplyHeader(headerBuffer, 0, _messageHeaderEncoder)
                .ClusterSessionId(_clusterSessionId)
                .Timestamp(Aeron.Aeron.NULL_VALUE);

                _vectors[0] = new DirectBufferVector(headerBuffer, 0, SessionDecorator.SESSION_HEADER_LENGTH);
                _vectors[1] = _messageBuffer;

                _poller            = new Poller(ctx.SessionMessageListener(), _clusterSessionId, this);
                _fragmentAssembler = new FragmentAssembler(_poller);
            }
            catch (Exception)
            {
                if (!ctx.OwnsAeronClient())
                {
                    CloseHelper.QuietDispose(_publication);
                    CloseHelper.QuietDispose(subscription);
                }

                CloseHelper.QuietDispose(ctx);
                throw;
            }
        }
Exemple #12
0
 public AeronClientSession(AeronClient client,
                           string serverChannel,
                           Publication publication,
                           Subscription subscription,
                           Action onConnected,
                           Action onDisconnected,
                           AeronClientMessageReceivedHandler onMessageReceived)
 {
     _client            = client;
     _serverChannel     = serverChannel;
     _publication       = publication;
     _buffer            = new UnsafeBuffer();
     Subscription       = subscription;
     OnDisconnected     = onDisconnected;
     _onMessageReceived = onMessageReceived;
     _onConnected       = onConnected;
     _isConnected       = false;
     _fragmentAssembler = new FragmentAssembler(HandlerHelper.ToFragmentHandler(SubscriptionHandler));
 }
Exemple #13
0
        public static void Main()
        {
            var ctx = new Aeron.Context()
                      .AvailableImageHandler(AvailablePongImageHandler);

            var fragmentAssembler = new FragmentAssembler(HandlerHelper.ToFragmentHandler(PongHandler));

            Console.WriteLine("Publishing Ping at " + PingChannel + " on stream Id " + PingStreamID);
            Console.WriteLine("Subscribing Pong at " + PongChannel + " on stream Id " + PongStreamID);
            Console.WriteLine("Message length of " + MessageLength + " bytes");

            using (var aeron = Aeron.Connect(ctx))
            {
                Console.WriteLine("Warming up... " + WarmupNumberOfIterations + " iterations of " + WarmupNumberOfMessages + " messages");

                using (var publication = aeron.AddPublication(PingChannel, PingStreamID))
                    using (var subscription = aeron.AddSubscription(PongChannel, PongStreamID))
                        using (var byteBuffer = BufferUtil.AllocateDirectAligned(MessageLength, BitUtil.CACHE_LINE_LENGTH))
                            using (var atomicBuffer = new UnsafeBuffer(byteBuffer))
                            {
                                Latch.Wait();

                                for (var i = 0; i < WarmupNumberOfIterations; i++)
                                {
                                    RoundTripMessages(atomicBuffer, fragmentAssembler, publication, subscription, WarmupNumberOfMessages);
                                }

                                Thread.Sleep(100);

                                do
                                {
                                    Histogram.Reset();
                                    Console.WriteLine("Pinging " + NumberOfMessages + " messages");

                                    RoundTripMessages(atomicBuffer, fragmentAssembler, publication, subscription, NumberOfMessages);
                                    Console.WriteLine("Histogram of RTT latencies in microseconds.");

                                    Histogram.OutputPercentileDistribution(Console.Out, outputValueUnitScalingRatio: 1000);
                                } while (Console.Read() == 'y');
                            }
            }
        }
Exemple #14
0
        public static void Main()
        {
            var ctx = new Aeron.Context()
                .AvailableImageHandler(AvailablePongImageHandler);

            var fragmentAssembler = new FragmentAssembler(PongHandler);

            Console.WriteLine("Publishing Ping at " + PingChannel + " on stream Id " + PingStreamID);
            Console.WriteLine("Subscribing Pong at " + PongChannel + " on stream Id " + PongStreamID);
            Console.WriteLine("Message length of " + MessageLength + " bytes");

            using (var aeron = Aeron.Connect(ctx))
            {
                Console.WriteLine("Warming up... " + WarmupNumberOfIterations + " iterations of " + WarmupNumberOfMessages + " messages");

                using (var publication = aeron.AddPublication(PingChannel, PingStreamID))
                using (var subscription = aeron.AddSubscription(PongChannel, PongStreamID))
                using (var byteBuffer = BufferUtil.AllocateDirectAligned(MessageLength, BitUtil.CACHE_LINE_LENGTH))
                using (var atomicBuffer = new UnsafeBuffer(byteBuffer))
                {
                    Latch.Wait();

                    for (var i = 0; i < WarmupNumberOfIterations; i++)
                    {
                        RoundTripMessages(atomicBuffer, fragmentAssembler.OnFragment, publication, subscription, WarmupNumberOfMessages);
                    }

                    Thread.Sleep(100);

                    do
                    {
                        Histogram.Reset();
                        Console.WriteLine("Pinging " + NumberOfMessages + " messages");

                        RoundTripMessages(atomicBuffer, fragmentAssembler.OnFragment, publication, subscription, NumberOfMessages);
                        Console.WriteLine("Histogram of RTT latencies in microseconds.");

                        Histogram.OutputPercentileDistribution(Console.Out, outputValueUnitScalingRatio: 1000);
                    } while (Console.Read() == 'y');
                }
            }
        }
Exemple #15
0
 private void InitializeInstanceFields()
 {
     fragmentAssembler = new FragmentAssembler(this);
 }
Exemple #16
0
 public ServiceAdapter(Subscription subscription, ClusteredServiceAgent clusteredServiceAgent)
 {
     this.subscription          = subscription;
     this.clusteredServiceAgent = clusteredServiceAgent;
     this.fragmentAssembler     = new FragmentAssembler(OnFragment);
 }