/**
   * INTERNAL: This is the main execution method of discovery. It will create a socket to listen on,
   * create a local connection for this service and announce that we are open for business.
   */
  public void run() {
    // Initialize the communication socket
    createCommunicationSocket();

    // Create the local connection from which we will receive commands
    rcm.getTransportManager().createLocalConnection();

    // Announce to all other discovery managers that this service is up. The
    // delay allows time for posting of connections to the name service
    try {
      Thread.sleep(announcementDelay);
    } catch (InterruptedException exception) {
    }
    announceSession();

    // Listen for other sessions that are joining
    startListening();
  }