code: @Override
      public void send(final Message message) throws NodeNotFoundException {
          assert message.getMessageId() <= 0 ^ message.isResponse();
          message.setTimestamp(System.nanoTime());
  
          assert message.isBroadcast() ^ message.getNode() >= 0;
  
          if (message.getNode() == cluster.getMyNodeId()) {
              scheduler.execute(new Runnable() {
                  @Override
                  public void run() {
                      receive(message);
                  }
              });
              return;
          }
  
          if (getCluster().hasServer()) {
              if (message.isBroadcast()
                      && (sendToServerInsteadOfMulticast || (message instanceof LineMessage && Cache.isReserved(((LineMessage) message).getLine()))))
                  message.setNode(SERVER);
          }
  
          if (message.getNode() == SERVER)
              sendToServer(message);
          else if (message.getNode() >= 0)
              sendToNode(message, message.getNode());
          else
              broadcast(message);
      }
docs: Blocks