+ $this->getListenerPoolInstance()->addListener($decoratorInstance);
+
+ // Debug output
+ $this->debugOutput('HUB: Initialize listener: FINISHED.');
+ }
+
+ /**
+ * Restores a previously stored node list from database
+ *
+ * @return void
+ */
+ public function bootstrapRestoreNodeList () {
+ // Debug output
+ $this->debugOutput('HUB: Restore node list: START');
+
+ // Get a wrapper instance
+ $wrapperInstance = ObjectFactory::createObjectByConfiguredName('node_list_db_wrapper_class');
+
+ // Now get a search criteria instance
+ $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
+
+ // Search for the node number zero which is hard-coded the default
+ // @TODO Add some criteria, e.g. if the node is active or so
+ //$searchInstance->addCriteria(NodeListDatabaseWrapper::DB_COLUMN_NODE_NR, 1);
+ //$searchInstance->addCriteria(NodeListDatabaseWrapper::DB_COLUMN_NODE_TYPE, $this->getRequestInstance()->getRequestElement('mode'));
+ //$searchInstance->setLimit(1);
+
+ // Get a result back
+ $resultInstance = $wrapperInstance->doSelectByCriteria($searchInstance);
+
+ // Is it valid?
+ if ($resultInstance->next()) {
+ $this->partialStub('Do something for restoring the list.');
+ // Output message
+ //$this->debugOutput('HUB: ');
+ } else {
+ // No previously saved node list found!
+ $this->debugOutput('HUB: No previously saved node list found. This is fine.');
+ }
+
+ // Debug output
+ $this->debugOutput('HUB: Restore node list: FINISHED.');
+ }
+
+ /**
+ * Getter for isActive attribute
+ *
+ * @return $isActive Whether the hub is active
+ */
+ public final function isNodeActive() () {
+ return $this->isActive;
+ }
+
+ /**
+ * Enables (default) or disables isActive flag
+ *
+ * @param $isActive Whether the hub is active
+ * @return void
+ */
+ public final function enableIsActive ($isActive = true) {
+ $this->isActive = (bool) $isActive;
+ }
+
+ /**
+ * Checks whether this node accepts announcements
+ *
+ * @return $acceptsAnnouncements Whether this node accepts announcements
+ */
+ public final function isAcceptingAnnouncements () {
+ // Check it (this node must be active and not shutdown!)
+ $acceptsAnnouncements = (($this->acceptsAnnouncements === true) && ($this->isNodeActive()());
+
+ // Return it
+ return $acceptsAnnouncements;
+ }
+
+ /**
+ * Enables whether this node accepts announcements
+ *
+ * @param $acceptsAnnouncements Whether this node accepts announcements (default: true)
+ * @return void
+ */
+ protected final function enableAcceptingAnnouncements ($acceptsAnnouncements = true) {
+ $this->acceptAnnouncements = $acceptsAnnouncements;
+ }
+
+
+ /**
+ * "Getter for address:port combination
+ *
+ * @param $handlerInstance A valid Networkable instance
+ * @return $addressPort A address:port combination for this node
+ */
+ public final function getAddressPort (Networkable $handlerInstance) {
+ // Construct config entry
+ $configEntry = 'node_' . $handlerInstance->getHandlerName() . '_listen_port';
+
+ // Get IP and port
+ $addressPort = $this->getConfigInstance()->detectServerAddress() . ':' . $this->getConfigInstance()->getConfigEntry($configEntry);
+
+ // Return it
+ return $addressPort;