code: @Override
      public void settle() throws IllegalStateException {
          lock.lock();
          try {
              checkState(connectionOpen);
              step = InitStep.WAITING_FOR_CHANNEL_CLOSE;
              log.info("Sending a CLOSE message to the server and waiting for response indicating successful settlement.");
              conn.sendToServer(Protos.TwoWayChannelMessage.newBuilder()
                      .setType(Protos.TwoWayChannelMessage.MessageType.CLOSE)
                      .build());
          } finally {
              lock.unlock();
          }
      }
docs: <p>Closes the connection, notifying the server it should settle the channel by broadcasting the most recent
  payment transaction.</p>
  
  <p>Note that this only generates a CLOSE message for the server and calls
  {@link IPaymentChannelClient.ClientConnection#destroyConnection(PaymentChannelCloseException.CloseReason)} to settle the connection, it does not
  actually handle connection close logic, and {@link PaymentChannelClient#connectionClosed()} must still be called
  after the connection fully closes.</p>
  
  @throws IllegalStateException If the connection is not currently open (ie the CLOSE message cannot be sent)