net.i2p.router.client

## Class QueuedClientConnectionRunner

- java.lang.Object
- - net.i2p.router.client.ClientConnectionRunner
  - - net.i2p.router.client.QueuedClientConnectionRunner

-     class QueuedClientConnectionRunner
      extends ClientConnectionRunner

  Zero-copy in-JVM. While super() starts both a reader and a writer thread, we only need a reader thread here.

- - ### Field Summary

    - ### Fields inherited from class net.i2p.router.client.ClientConnectionRunner

      `_context, _log, _manager, _reader`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `QueuedClientConnectionRunner(RouterContext context, ClientManager manager, I2CPMessageQueue queue)` Create a new runner with the given queues

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `(package private) void` | `doSend(I2CPMessage msg)` Actually send the I2CPMessage to the client.
    `String` | `getClientVersion()` The client version.
    `void` | `setClientVersion(String version)` Does nothing.
    `void` | `startRunning()` Starts the reader thread.
    `void` | `stopRunning()` Calls super() to stop the reader, and sends a poison message to the client.
    `(package private) void` | `writeMessage(I2CPMessage msg)` In super(), doSend queues it to the writer thread and the writer thread calls writeMessage() to write to the output stream.

    - ### Methods inherited from class net.i2p.router.client.ClientConnectionRunner

      `ackSendMessage, createListener, disconnectClient, disconnectClient, disconnectClientNoLog, disconnected, distributeMessage, failLeaseRequest, getAddress, getConfig, getConfig, getDestHash, getDestHash, getDestination, getDestinations, getFloodfillNetworkDatabaseFacade, getIsDead, getLeaseRequest, getLeaseSet, getNextMessageId, getPayload, getPrimaryConfig, getSessionId, getSessionIds, getSessionKeyManager, isDead, leaseSetCreated, receiveMessage, receiveMessage, registerEncryptedLS, removePayload, removeSession, reportAbuse, requestLeaseSet, sessionEstablished, setPayload, setSessionId, updateMessageDeliveryStatus`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### QueuedClientConnectionRunner

          public QueuedClientConnectionRunner(RouterContext context,
                                              ClientManager manager,
                                              I2CPMessageQueue queue)

      Create a new runner with the given queues

  - ### Method Detail

    - #### doSend

          void doSend(I2CPMessage msg)
               throws I2CPMessageException

      Actually send the I2CPMessage to the client. Non-blocking.
      Overrides:
        `doSend` in class `ClientConnectionRunner`
      Throws:
        `I2CPMessageException` - if queue full or on other errors

    - #### getClientVersion

          public String getClientVersion()

      The client version.
      Overrides:
        `getClientVersion` in class `ClientConnectionRunner`
      Returns:
        CoreVersion.PUBLISHED_VERSION

    - #### setClientVersion

          public void setClientVersion(String version)

      Does nothing. Client version is the core version.
      Overrides:
        `setClientVersion` in class `ClientConnectionRunner`

    - #### startRunning

          public void startRunning()

      Starts the reader thread. Does not call super().
      Overrides:
        `startRunning` in class `ClientConnectionRunner`

    - #### stopRunning

          public void stopRunning()

      Calls super() to stop the reader, and sends a poison message to the client.
      Overrides:
        `stopRunning` in class `ClientConnectionRunner`

    - #### writeMessage

          void writeMessage(I2CPMessage msg)

      In super(), doSend queues it to the writer thread and the writer thread calls writeMessage() to write to the output stream. Since we have no writer thread this shouldn't happen.
      Overrides:
        `writeMessage` in class `ClientConnectionRunner`