コード例 #1
0
ファイル: MediaDriver.java プロジェクト: taoguan/Aeron
  /**
   * Construct a media driver with the given context.
   *
   * @param context for the media driver parameters
   */
  private MediaDriver(final Context context) {
    this.ctx = context;

    ensureDirectoryIsRecreated(context);

    validateSufficientSocketBufferLengths(context);

    context
        .toConductorFromReceiverCommandQueue(new OneToOneConcurrentArrayQueue<>(CMD_QUEUE_CAPACITY))
        .toConductorFromSenderCommandQueue(new OneToOneConcurrentArrayQueue<>(CMD_QUEUE_CAPACITY))
        .receiverCommandQueue(new OneToOneConcurrentArrayQueue<>(CMD_QUEUE_CAPACITY))
        .senderCommandQueue(new OneToOneConcurrentArrayQueue<>(CMD_QUEUE_CAPACITY))
        .conclude();

    final Receiver receiver = new Receiver(context);
    final Sender sender = new Sender(context);
    final DriverConductor conductor = new DriverConductor(context);

    context.receiverProxy().receiver(receiver);
    context.senderProxy().sender(sender);
    context.fromReceiverDriverConductorProxy().driverConductor(conductor);
    context.fromSenderDriverConductorProxy().driverConductor(conductor);
    context.toDriverCommands().consumerHeartbeatTime(context.epochClock().time());

    final AtomicCounter errorCounter = context.systemCounters().errors();
    final ErrorHandler errorHandler = context.errorHandler();

    switch (context.threadingMode) {
      case SHARED:
        runners =
            Collections.singletonList(
                new AgentRunner(
                    context.sharedIdleStrategy,
                    errorHandler,
                    errorCounter,
                    new CompositeAgent(sender, receiver, conductor)));
        break;

      case SHARED_NETWORK:
        runners =
            Arrays.asList(
                new AgentRunner(
                    context.sharedNetworkIdleStrategy,
                    errorHandler,
                    errorCounter,
                    new CompositeAgent(sender, receiver)),
                new AgentRunner(
                    context.conductorIdleStrategy, errorHandler, errorCounter, conductor));
        break;

      default:
      case DEDICATED:
        runners =
            Arrays.asList(
                new AgentRunner(context.senderIdleStrategy, errorHandler, errorCounter, sender),
                new AgentRunner(context.receiverIdleStrategy, errorHandler, errorCounter, receiver),
                new AgentRunner(
                    context.conductorIdleStrategy, errorHandler, errorCounter, conductor));
    }
  }