コード例 #1
0
        internal ClientConductor(Aeron.Context ctx)
        {
            _ctx = ctx;

            _clientLock = ctx.ClientLock();
            _epochClock = ctx.EpochClock();
            _nanoClock  = ctx.NanoClock();

            _driverProxy       = ctx.DriverProxy();
            _logBuffersFactory = ctx.LogBuffersFactory();

            _keepAliveIntervalNs            = ctx.KeepAliveInterval();
            _driverTimeoutMs                = ctx.DriverTimeoutMs();
            _driverTimeoutNs                = _driverTimeoutMs * 1000000;
            _interServiceTimeoutNs          = ctx.InterServiceTimeout();
            _defaultAvailableImageHandler   = ctx.AvailableImageHandler();
            _defaultUnavailableImageHandler = ctx.UnavailableImageHandler();
            _availableCounterHandler        = ctx.AvailableCounterHandler();
            _unavailableCounterHandler      = ctx.UnavailableCounterHandler();
            _driverEventsAdapter            = new DriverEventsAdapter(ctx.ToClientBuffer(), this);
            _counterValuesBuffer            = ctx.CountersValuesBuffer();
            _countersReader =
                new CountersReader(ctx.CountersMetaDataBuffer(), ctx.CountersValuesBuffer(), Encoding.ASCII);

            long nowNs = _nanoClock.NanoTime();

            _timeOfLastKeepAliveNs      = nowNs;
            _timeOfLastResourcesCheckNs = nowNs;
            _timeOfLastServiceNs        = nowNs;
        }
コード例 #2
0
ファイル: ClientConductor.cs プロジェクト: bpb1/Aeron.NET
        internal ClientConductor(Aeron.Context ctx)
        {
            _ctx = ctx;

            _clientLock                     = ctx.ClientLock();
            _epochClock                     = ctx.EpochClock();
            _nanoClock                      = ctx.NanoClock();
            _errorHandler                   = ctx.ErrorHandler();
            _counterValuesBuffer            = ctx.CountersValuesBuffer();
            _driverProxy                    = ctx.DriverProxy();
            _logBuffersFactory              = ctx.LogBuffersFactory();
            _imageMapMode                   = ctx.ImageMapMode();
            _keepAliveIntervalNs            = ctx.KeepAliveInterval();
            _driverTimeoutMs                = ctx.DriverTimeoutMs();
            _driverTimeoutNs                = _driverTimeoutMs * 1000000;
            _interServiceTimeoutNs          = ctx.InterServiceTimeout();
            _publicationConnectionTimeoutMs = ctx.PublicationConnectionTimeout();
            _driverListener                 = new DriverListenerAdapter(ctx.ToClientBuffer(), this);
            _driverAgentInvoker             = ctx.DriverAgentInvoker();

            long nowNs = _nanoClock.NanoTime();

            _timeOfLastKeepaliveNs      = nowNs;
            _timeOfLastCheckResourcesNs = nowNs;
            _timeOfLastWorkNs           = nowNs;
        }
コード例 #3
0
        internal ClientConductor(Aeron.Context ctx)
        {
            _clientLock                     = ctx.ClientLock();
            _epochClock                     = ctx.EpochClock();
            _nanoClock                      = ctx.NanoClock();
            _errorHandler                   = ctx.ErrorHandler();
            _counterValuesBuffer            = ctx.CountersValuesBuffer();
            _driverProxy                    = ctx.DriverProxy();
            _logBuffersFactory              = ctx.LogBuffersFactory();
            _imageMapMode                   = ctx.ImageMapMode();
            _keepAliveIntervalNs            = ctx.KeepAliveInterval();
            _driverTimeoutMs                = ctx.DriverTimeoutMs();
            _driverTimeoutNs                = _driverTimeoutMs * 1000000;
            _interServiceTimeoutNs          = ctx.InterServiceTimeout();
            _publicationConnectionTimeoutMs = ctx.PublicationConnectionTimeout();
            _defaultAvailableImageHandler   = ctx.AvailableImageHandler();
            _defaultUnavailableImageHandler = ctx.UnavailableImageHandler();
            _driverEventsAdapter            = new DriverEventsAdapter(ctx.ToClientBuffer(), this);

            long nowNs = _nanoClock.NanoTime();

            _timeOfLastKeepAliveNs      = nowNs;
            _timeOfLastResourcesCheckNs = nowNs;
            _timeOfLastServiceNs        = nowNs;
        }
コード例 #4
0
        internal ClientConductor(
            IEpochClock epochClock,
            INanoClock nanoClock,
            CopyBroadcastReceiver broadcastReceiver,
            ILogBuffersFactory logBuffersFactory,
            UnsafeBuffer counterValuesBuffer,
            DriverProxy driverProxy,
            ErrorHandler errorHandler,
            AvailableImageHandler availableImageHandler,
            UnavailableImageHandler unavailableImageHandler,
            long keepAliveIntervalNs,
            long driverTimeoutMs,
            long interServiceTimeoutNs,
            long publicationConnectionTimeoutMs)
        {
            _epochClock                     = epochClock;
            _nanoClock                      = nanoClock;
            _timeOfLastKeepalive            = nanoClock.NanoTime();
            _timeOfLastCheckResources       = nanoClock.NanoTime();
            _timeOfLastWork                 = nanoClock.NanoTime();
            _errorHandler                   = errorHandler;
            _counterValuesBuffer            = counterValuesBuffer;
            _driverProxy                    = driverProxy;
            _logBuffersFactory              = logBuffersFactory;
            _availableImageHandler          = availableImageHandler;
            _unavailableImageHandler        = unavailableImageHandler;
            _keepAliveIntervalNs            = keepAliveIntervalNs;
            _driverTimeoutMs                = driverTimeoutMs;
            _driverTimeoutNs                = NanoUtil.FromMilliseconds(driverTimeoutMs);
            _interServiceTimeoutNs          = interServiceTimeoutNs;
            _publicationConnectionTimeoutMs = publicationConnectionTimeoutMs;

            _driverListener = new DriverListenerAdapter(broadcastReceiver, this);
        }
コード例 #5
0
        internal ClientConductor(Aeron.Context ctx, Aeron aeron)
        {
            _ctx   = ctx;
            _aeron = aeron;

            _clientLock                     = ctx.ClientLock();
            _epochClock                     = ctx.EpochClock();
            _nanoClock                      = ctx.NanoClock();
            _awaitingIdleStrategy           = ctx.AwaitingIdleStrategy();
            _driverProxy                    = ctx.DriverProxy();
            _logBuffersFactory              = ctx.LogBuffersFactory();
            _keepAliveIntervalNs            = ctx.KeepAliveIntervalNs();
            _driverTimeoutMs                = ctx.DriverTimeoutMs();
            _driverTimeoutNs                = _driverTimeoutMs * 1000000;
            _interServiceTimeoutNs          = ctx.InterServiceTimeoutNs();
            _defaultAvailableImageHandler   = ctx.AvailableImageHandler();
            _defaultUnavailableImageHandler = ctx.UnavailableImageHandler();
            _driverEventsAdapter            =
                new DriverEventsAdapter(ctx.ToClientBuffer(), ctx.ClientId(), this, _asyncCommandIdSet);
            _driverAgentInvoker  = ctx.DriverAgentInvoker();
            _counterValuesBuffer = ctx.CountersValuesBuffer();
            _countersReader      =
                new CountersReader(ctx.CountersMetaDataBuffer(), ctx.CountersValuesBuffer(), Encoding.ASCII);

            if (null != ctx.AvailableCounterHandler())
            {
                _availableCounterHandlers.Add(ctx.AvailableCounterHandler());
            }

            if (null != ctx.UnavailableCounterHandler())
            {
                _unavailableCounterHandlers.Add(ctx.UnavailableCounterHandler());
            }

            if (null != ctx.CloseHandler())
            {
                _closeHandlers.Add(ctx.CloseHandler());
            }

            long nowNs = _nanoClock.NanoTime();

            _timeOfLastKeepAliveNs = nowNs;
            _timeOfLastServiceNs   = nowNs;
        }
コード例 #6
0
        public void SetUp()
        {
            MockClientErrorHandler = A.Fake <ErrorHandler>(options => options.Wrapping(throwable =>
            {
                if (!SuppressPrintError)
                {
                    Console.WriteLine(throwable.ToString());
                    Console.Write(throwable.StackTrace);
                }
            }));

            PublicationReady  = new PublicationBuffersReadyFlyweight();
            CorrelatedMessage = new CorrelatedMessageFlyweight();
            ErrorResponse     = new ErrorResponseFlyweight();

            PublicationReadyBuffer  = new UnsafeBuffer(new byte[SEND_BUFFER_CAPACITY]);
            CorrelatedMessageBuffer = new UnsafeBuffer(new byte[SEND_BUFFER_CAPACITY]);
            ErrorMessageBuffer      = new UnsafeBuffer(new byte[SEND_BUFFER_CAPACITY]);
            CounterValuesBuffer     = new UnsafeBuffer(new byte[COUNTER_BUFFER_LENGTH]);
            MockToClientReceiver    = A.Fake <CopyBroadcastReceiver>();

            MockAvailableImageHandler   = A.Fake <AvailableImageHandler>();
            MockUnavailableImageHandler = A.Fake <UnavailableImageHandler>();

            LogBuffersFactory = A.Fake <ILogBuffersFactory>();

            SubscriberPositionMap = new Dictionary <long, long>(); // should return -1 when element does not exist

            DriverProxy = A.Fake <DriverProxy>();

            A.CallTo(() => DriverProxy.AddPublication(CHANNEL, STREAM_ID_1)).Returns(CORRELATION_ID);
            A.CallTo(() => DriverProxy.AddPublication(CHANNEL, STREAM_ID_2)).Returns(CORRELATION_ID_2);
            A.CallTo(() => DriverProxy.RemovePublication(CORRELATION_ID)).Returns(CLOSE_CORRELATION_ID);
            A.CallTo(() => DriverProxy.AddSubscription(A <string> ._, A <int> ._)).Returns(CORRELATION_ID);
            A.CallTo(() => DriverProxy.RemoveSubscription(CORRELATION_ID)).Returns(CLOSE_CORRELATION_ID);

            Conductor = new ClientConductor(EpochClock, NanoClock, MockToClientReceiver, LogBuffersFactory, CounterValuesBuffer, DriverProxy, MockClientErrorHandler, MockAvailableImageHandler, MockUnavailableImageHandler, MapMode.ReadOnly, KEEP_ALIVE_INTERVAL, AWAIT_TIMEOUT, NanoUtil.FromMilliseconds(INTER_SERVICE_TIMEOUT_MS), PUBLICATION_CONNECTION_TIMEOUT_MS);

            PublicationReady.Wrap(PublicationReadyBuffer, 0);
            CorrelatedMessage.Wrap(CorrelatedMessageBuffer, 0);
            ErrorResponse.Wrap(ErrorMessageBuffer, 0);

            PublicationReady.CorrelationId(CORRELATION_ID);
            PublicationReady.SessionId(SESSION_ID_1);
            PublicationReady.StreamId(STREAM_ID_1);
            PublicationReady.LogFileName(SESSION_ID_1 + "-log");

            SubscriberPositionMap.Add(CORRELATION_ID, 0);

            CorrelatedMessage.CorrelationId(CLOSE_CORRELATION_ID);

            var termBuffersSession1 = new UnsafeBuffer[LogBufferDescriptor.PARTITION_COUNT];
            var termBuffersSession2 = new UnsafeBuffer[LogBufferDescriptor.PARTITION_COUNT];

            for (var i = 0; i < LogBufferDescriptor.PARTITION_COUNT; i++)
            {
                termBuffersSession1[i] = new UnsafeBuffer(new byte[TERM_BUFFER_LENGTH]);
                termBuffersSession2[i] = new UnsafeBuffer(new byte[TERM_BUFFER_LENGTH]);
            }

            UnsafeBuffer logMetaDataSession1 = new UnsafeBuffer(new byte[TERM_BUFFER_LENGTH]);
            UnsafeBuffer logMetaDataSession2 = new UnsafeBuffer(new byte[TERM_BUFFER_LENGTH]);

            IMutableDirectBuffer header1 = DataHeaderFlyweight.CreateDefaultHeader(SESSION_ID_1, STREAM_ID_1, 0);
            IMutableDirectBuffer header2 = DataHeaderFlyweight.CreateDefaultHeader(SESSION_ID_2, STREAM_ID_2, 0);

            LogBufferDescriptor.StoreDefaultFrameHeader(logMetaDataSession1, header1);
            LogBufferDescriptor.StoreDefaultFrameHeader(logMetaDataSession2, header2);

            var logBuffersSession1 = A.Fake <LogBuffers>();
            var logBuffersSession2 = A.Fake <LogBuffers>();

            A.CallTo(() => LogBuffersFactory.Map(SESSION_ID_1 + "-log", A <MapMode> ._)).Returns(logBuffersSession1);
            A.CallTo(() => LogBuffersFactory.Map(SESSION_ID_2 + "-log", A <MapMode> ._)).Returns(logBuffersSession2);
            A.CallTo(() => logBuffersSession1.TermBuffers()).Returns(termBuffersSession1);
            A.CallTo(() => logBuffersSession2.TermBuffers()).Returns(termBuffersSession2);

            A.CallTo(() => logBuffersSession1.MetaDataBuffer()).Returns(logMetaDataSession1);
            A.CallTo(() => logBuffersSession2.MetaDataBuffer()).Returns(logMetaDataSession2);
        }
コード例 #7
0
ファイル: Aeron.cs プロジェクト: yksi7417/Aeron.NET
 /// <summary>
 /// This method is used for testing and debugging.
 /// </summary>
 /// <param name="logBuffersFactory"> Injected LogBuffersFactory </param>
 /// <returns> this Aeron.Context for method chaining. </returns>
 public Context BufferManager(ILogBuffersFactory logBuffersFactory)
 {
     _logBuffersFactory = logBuffersFactory;
     return(this);
 }
コード例 #8
0
ファイル: Aeron.cs プロジェクト: yksi7417/Aeron.NET
            /// <summary>
            /// This is called automatically by <seealso cref="Connect()"/> and its overloads.
            /// There is no need to call it from a client application. It is responsible for providing default
            /// values for options that are not individually changed through field setters.
            /// </summary>
            /// <returns> this Aeron.Context for method chaining. </returns>
            public Context Conclude()
            {
                _cncFile = new FileInfo(Path.Combine(_aeronDirectoryName, CncFileDescriptor.CNC_FILE));

                if (_epochClock == null)
                {
                    _epochClock = new SystemEpochClock();
                }

                if (_nanoClock == null)
                {
                    _nanoClock = new SystemNanoClock();
                }

                if (_idleStrategy == null)
                {
                    _idleStrategy = new SleepingIdleStrategy(IdleSleepMs);
                }

                if (CncFile() != null)
                {
                    ConnectToDriver();
                }

                if (_toClientBuffer == null)
                {
                    var receiver =
                        new BroadcastReceiver(CncFileDescriptor.CreateToClientsBuffer(_cncByteBuffer,
                                                                                      _cncMetaDataBuffer));
                    _toClientBuffer = new CopyBroadcastReceiver(receiver);
                }

                if (_toDriverBuffer == null)
                {
                    _toDriverBuffer =
                        new ManyToOneRingBuffer(CncFileDescriptor.CreateToDriverBuffer(_cncByteBuffer,
                                                                                       _cncMetaDataBuffer));
                }

                if (CountersMetaDataBuffer() == null)
                {
                    CountersMetaDataBuffer(CncFileDescriptor.CreateCountersMetaDataBuffer(_cncByteBuffer,
                                                                                          _cncMetaDataBuffer));
                }

                if (CountersValuesBuffer() == null)
                {
                    CountersValuesBuffer(CncFileDescriptor.CreateCountersValuesBuffer(_cncByteBuffer,
                                                                                      _cncMetaDataBuffer));
                }

                _interServiceTimeout = CncFileDescriptor.ClientLivenessTimeout(_cncMetaDataBuffer);

                if (_logBuffersFactory == null)
                {
                    _logBuffersFactory = new MappedLogBuffersFactory();
                }

                if (_errorHandler == null)
                {
                    _errorHandler = DEFAULT_ERROR_HANDLER;
                }

                if (_availableImageHandler == null)
                {
                    _availableImageHandler = image => { };
                }

                if (_unavailableImageHandler == null)
                {
                    _unavailableImageHandler = image => { };
                }

                return(this);
            }
コード例 #9
0
        public void SetUp()
        {
            MockClientErrorHandler = A.Fake <ErrorHandler>(options => options.Wrapping(throwable =>
            {
                if (!SuppressPrintError)
                {
                    Console.WriteLine(throwable.ToString());
                    Console.Write(throwable.StackTrace);
                }
            }));

            PublicationReady  = new PublicationBuffersReadyFlyweight();
            SubscriptionReady = new SubscriptionReadyFlyweight();
            OperationSuccess  = new OperationSucceededFlyweight();
            ErrorResponse     = new ErrorResponseFlyweight();
            ClientTimeout     = new ClientTimeoutFlyweight();

            PublicationReadyBuffer  = new UnsafeBuffer(new byte[SEND_BUFFER_CAPACITY]);
            SubscriptionReadyBuffer = new UnsafeBuffer(new byte[SEND_BUFFER_CAPACITY]);
            OperationSuccessBuffer  = new UnsafeBuffer(new byte[SEND_BUFFER_CAPACITY]);
            ErrorMessageBuffer      = new UnsafeBuffer(new byte[SEND_BUFFER_CAPACITY]);
            ClientTimeoutBuffer     = new UnsafeBuffer(new byte[SEND_BUFFER_CAPACITY]);

            CounterValuesBuffer  = new UnsafeBuffer(new byte[COUNTER_BUFFER_LENGTH]);
            MockToClientReceiver = A.Fake <CopyBroadcastReceiver>();

            MockAvailableImageHandler   = A.Fake <AvailableImageHandler>();
            MockUnavailableImageHandler = A.Fake <UnavailableImageHandler>();
            MockCloseHandler            = A.Fake <Action>();

            LogBuffersFactory = A.Fake <ILogBuffersFactory>();

            DriverProxy = A.Fake <DriverProxy>();

            MockAeron = A.Fake <Aeron>();

            A.CallTo(() => mockClientLock.TryLock()).Returns(true);

            A.CallTo(() => DriverProxy.AddPublication(CHANNEL, STREAM_ID_1)).Returns(CORRELATION_ID);
            A.CallTo(() => DriverProxy.AddPublication(CHANNEL, STREAM_ID_2)).Returns(CORRELATION_ID_2);
            A.CallTo(() => DriverProxy.RemovePublication(CORRELATION_ID)).Returns(CLOSE_CORRELATION_ID);
            A.CallTo(() => DriverProxy.AddSubscription(A <string> ._, A <int> ._)).Returns(CORRELATION_ID);
            A.CallTo(() => DriverProxy.RemoveSubscription(CORRELATION_ID)).Returns(CLOSE_CORRELATION_ID);

            Aeron.Context ctx = new Aeron.Context()
                                .ClientLock(mockClientLock)
                                .EpochClock(EpochClock)
                                .NanoClock(NanoClock)
                                .ToClientBuffer(MockToClientReceiver)
                                .DriverProxy(DriverProxy)
                                .LogBuffersFactory(LogBuffersFactory)
                                .ErrorHandler(MockClientErrorHandler)
                                .AvailableImageHandler(MockAvailableImageHandler)
                                .UnavailableImageHandler(MockUnavailableImageHandler)
                                .CloseHandler(MockCloseHandler)
                                .KeepAliveIntervalNs(KEEP_ALIVE_INTERVAL)
                                .DriverTimeoutMs(AWAIT_TIMEOUT)
                                .InterServiceTimeoutNs(INTER_SERVICE_TIMEOUT_MS * 1000000)
                                .CountersValuesBuffer(CounterValuesBuffer);

            Conductor = new ClientConductor(ctx, MockAeron);

            PublicationReady.Wrap(PublicationReadyBuffer, 0);
            SubscriptionReady.Wrap(SubscriptionReadyBuffer, 0);
            OperationSuccess.Wrap(OperationSuccessBuffer, 0);
            ErrorResponse.Wrap(ErrorMessageBuffer, 0);
            ClientTimeout.Wrap(ClientTimeoutBuffer, 0);

            PublicationReady.CorrelationId(CORRELATION_ID);
            PublicationReady.RegistrationId(CORRELATION_ID);
            PublicationReady.SessionId(SESSION_ID_1);
            PublicationReady.StreamId(STREAM_ID_1);
            PublicationReady.LogFileName(SESSION_ID_1 + "-log");

            OperationSuccess.CorrelationId(CLOSE_CORRELATION_ID);

            var termBuffersSession1 = new UnsafeBuffer[LogBufferDescriptor.PARTITION_COUNT];
            var termBuffersSession2 = new UnsafeBuffer[LogBufferDescriptor.PARTITION_COUNT];

            for (var i = 0; i < LogBufferDescriptor.PARTITION_COUNT; i++)
            {
                termBuffersSession1[i] = new UnsafeBuffer(new byte[TERM_BUFFER_LENGTH]);
                termBuffersSession2[i] = new UnsafeBuffer(new byte[TERM_BUFFER_LENGTH]);
            }

            UnsafeBuffer logMetaDataSession1 = new UnsafeBuffer(new byte[TERM_BUFFER_LENGTH]);
            UnsafeBuffer logMetaDataSession2 = new UnsafeBuffer(new byte[TERM_BUFFER_LENGTH]);

            IMutableDirectBuffer header1 = DataHeaderFlyweight.CreateDefaultHeader(SESSION_ID_1, STREAM_ID_1, 0);
            IMutableDirectBuffer header2 = DataHeaderFlyweight.CreateDefaultHeader(SESSION_ID_2, STREAM_ID_2, 0);

            LogBufferDescriptor.StoreDefaultFrameHeader(logMetaDataSession1, header1);
            LogBufferDescriptor.StoreDefaultFrameHeader(logMetaDataSession2, header2);

            var logBuffersSession1 = A.Fake <LogBuffers>();
            var logBuffersSession2 = A.Fake <LogBuffers>();

            A.CallTo(() => LogBuffersFactory.Map(SESSION_ID_1 + "-log")).Returns(logBuffersSession1);
            A.CallTo(() => LogBuffersFactory.Map(SESSION_ID_2 + "-log")).Returns(logBuffersSession2);

            A.CallTo(() => logBuffersSession1.DuplicateTermBuffers()).Returns(termBuffersSession1);
            A.CallTo(() => logBuffersSession2.DuplicateTermBuffers()).Returns(termBuffersSession2);

            A.CallTo(() => logBuffersSession1.MetaDataBuffer()).Returns(logMetaDataSession1);
            A.CallTo(() => logBuffersSession2.MetaDataBuffer()).Returns(logMetaDataSession2);

            A.CallTo(() => logBuffersSession1.TermLength()).Returns(TERM_BUFFER_LENGTH);
            A.CallTo(() => logBuffersSession2.TermLength()).Returns(TERM_BUFFER_LENGTH);
        }
コード例 #10
0
ファイル: Aeron.cs プロジェクト: malat/Aeron.NET
            /// <summary>
            /// This is called automatically by <seealso cref="Connect()"/> and its overloads.
            /// There is no need to call it from a client application. It is responsible for providing default
            /// values for options that are not individually changed through field setters.
            /// </summary>
            /// <returns> this Aeron.Context for method chaining. </returns>
            public Context Conclude()
            {
                try
                {
                    _cncFile = new FileInfo(Path.Combine(_aeronDirectoryName, CncFileDescriptor.CNC_FILE));

                    if (_epochClock == null)
                    {
                        _epochClock = new SystemEpochClock();
                    }

                    if (_nanoClock == null)
                    {
                        _nanoClock = new SystemNanoClock();
                    }

                    if (_idleStrategy == null)
                    {
                        _idleStrategy = new SleepingIdleStrategy(IdleSleepMs);
                    }

                    if (CncFile() != null)
                    {
                        _cncByteBuffer     = IoUtil.MapExistingFile(CncFile().FullName);
                        _cncMetaDataBuffer = CncFileDescriptor.CreateMetaDataBuffer(_cncByteBuffer);

                        var cncVersion = _cncMetaDataBuffer.GetInt(CncFileDescriptor.CncVersionOffset(0));

                        if (CncFileDescriptor.CNC_VERSION != cncVersion)
                        {
                            throw new InvalidOperationException(
                                      "aeron cnc file version not understood: version=" + cncVersion);
                        }
                    }

                    if (_toClientBuffer == null)
                    {
                        var receiver =
                            new BroadcastReceiver(CncFileDescriptor.CreateToClientsBuffer(_cncByteBuffer,
                                                                                          _cncMetaDataBuffer));
                        _toClientBuffer = new CopyBroadcastReceiver(receiver);
                    }

                    if (_toDriverBuffer == null)
                    {
                        _toDriverBuffer =
                            new ManyToOneRingBuffer(CncFileDescriptor.CreateToDriverBuffer(_cncByteBuffer,
                                                                                           _cncMetaDataBuffer));
                    }

                    if (CountersMetaDataBuffer() == null)
                    {
                        CountersMetaDataBuffer(CncFileDescriptor.CreateCountersMetaDataBuffer(_cncByteBuffer,
                                                                                              _cncMetaDataBuffer));
                    }

                    if (CountersValuesBuffer() == null)
                    {
                        CountersValuesBuffer(CncFileDescriptor.CreateCountersValuesBuffer(_cncByteBuffer,
                                                                                          _cncMetaDataBuffer));
                    }

                    _interServiceTimeout = CncFileDescriptor.ClientLivenessTimeout(_cncMetaDataBuffer);

                    if (_logBuffersFactory == null)
                    {
                        _logBuffersFactory = new MappedLogBuffersFactory();
                    }

                    if (_errorHandler == null)
                    {
                        _errorHandler = DEFAULT_ERROR_HANDLER;
                    }

                    if (_availableImageHandler == null)
                    {
                        _availableImageHandler = image => { };
                    }

                    if (_unavailableImageHandler == null)
                    {
                        _unavailableImageHandler = image => { };
                    }
                }
                catch (
                    Exception ex)
                {
                    Console.WriteLine("***");
                    Console.WriteLine("***");
                    Console.WriteLine("Failed to connect to the Media Driver - is it currently running?");
                    Console.WriteLine("***");
                    Console.WriteLine("***");

                    throw new InvalidOperationException("Could not initialise communication buffers", ex);
                }

                return(this);
            }
コード例 #11
0
 /// <summary>
 /// This method is used for testing and debugging.
 /// </summary>
 /// <param name="logBuffersFactory"> Injected LogBuffersFactory </param>
 /// <returns> this Aeron.Context for method chaining. </returns>
 public Context BufferManager(ILogBuffersFactory logBuffersFactory)
 {
     _logBuffersFactory = logBuffersFactory;
     return this;
 }
コード例 #12
0
            /// <summary>
            /// This is called automatically by <seealso cref="Connect()"/> and its overloads.
            /// There is no need to call it from a client application. It is responsible for providing default
            /// values for options that are not individually changed through field setters.
            /// </summary>
            /// <returns> this Aeron.Context for method chaining. </returns>
            public Context Conclude()
            {
                try
                {
                    _cncFile = new FileInfo(Path.Combine(_aeronDirectoryName, CncFileDescriptor.CNC_FILE));

                    if (_epochClock == null)
                    {
                        _epochClock = new SystemEpochClock();
                    }

                    if (_nanoClock == null)
                    {
                        _nanoClock = new SystemNanoClock();
                    }

                    if (_idleStrategy == null)
                    {
                        _idleStrategy = new SleepingIdleStrategy(IdleSleepMs);
                    }

                    if (CncFile() != null)
                    {
                        _cncByteBuffer = IoUtil.MapExistingFile(CncFile().FullName);
                        _cncMetaDataBuffer = CncFileDescriptor.CreateMetaDataBuffer(_cncByteBuffer);

                        var cncVersion = _cncMetaDataBuffer.GetInt(CncFileDescriptor.CncVersionOffset(0));

                        if (CncFileDescriptor.CNC_VERSION != cncVersion)
                        {
                            throw new InvalidOperationException(
                                "aeron cnc file version not understood: version=" + cncVersion);
                        }
                    }

                    if (_toClientBuffer == null)
                    {
                        var receiver =
                            new BroadcastReceiver(CncFileDescriptor.CreateToClientsBuffer(_cncByteBuffer,
                                _cncMetaDataBuffer));
                        _toClientBuffer = new CopyBroadcastReceiver(receiver);
                    }

                    if (_toDriverBuffer == null)
                    {
                        _toDriverBuffer =
                            new ManyToOneRingBuffer(CncFileDescriptor.CreateToDriverBuffer(_cncByteBuffer,
                                _cncMetaDataBuffer));
                    }

                    if (CountersMetaDataBuffer() == null)
                    {
                        CountersMetaDataBuffer(CncFileDescriptor.CreateCountersMetaDataBuffer(_cncByteBuffer,
                            _cncMetaDataBuffer));
                    }

                    if (CountersValuesBuffer() == null)
                    {
                        CountersValuesBuffer(CncFileDescriptor.CreateCountersValuesBuffer(_cncByteBuffer,
                            _cncMetaDataBuffer));
                    }

                    _interServiceTimeout = CncFileDescriptor.ClientLivenessTimeout(_cncMetaDataBuffer);

                    if (_logBuffersFactory == null)
                    {
                        _logBuffersFactory = new MappedLogBuffersFactory();
                    }

                    if (_errorHandler == null)
                    {
                        _errorHandler = DEFAULT_ERROR_HANDLER;
                    }

                    if (_availableImageHandler == null)
                    {
                        _availableImageHandler = image => { };
                    }

                    if (_unavailableImageHandler == null)
                    {
                        _unavailableImageHandler = image => { };
                    }
                }
                catch (
                    Exception ex)
                {
                    Console.WriteLine("***");
                    Console.WriteLine("***");
                    Console.WriteLine("Failed to connect to the Media Driver - is it currently running?");
                    Console.WriteLine("***");
                    Console.WriteLine("***");

                    throw new InvalidOperationException("Could not initialise communication buffers", ex);
                }

                return this;
            }