* Whether this node is anncounced (KEEP ON false!)
* @deprecated
*/
- private $hubIsAnnounced = false;
+ private $hubIsAnnounced = FALSE;
/**
* Whether this hub is active (default: false)
*/
- private $isActive = false;
+ private $isActive = FALSE;
/**
* Whether this node accepts announcements (default: false)
*/
- private $acceptAnnouncements = false;
+ private $acceptAnnouncements = FALSE;
/**
* Protected constructor
* @return void
*/
private function generatePrivateKeyAndHash (LocalSearchCriteria $searchInstance) {
+ // Get an RNG instance
+ $rngInstance = ObjectFactory::createObjectByConfiguredName('rng_class');
+
// Generate a pseudo-random string
- $randomString = $this->generateRandomString(255);
+ $randomString = $rngInstance->randomString(255);
// Hash and encrypt the string so we become a node id (also documented as "hub id")
$this->setPrivateKey($this->getCryptoInstance()->encryptString($randomString));
*/
protected function ifAddressMatchesBootstrappingNodes ($remoteAddr) {
// By default nothing is found
- $isFound = false;
+ $isFound = FALSE;
// Run through all configured IPs
foreach (explode(BaseHubSystem::BOOTSTRAP_NODES_SEPARATOR, $this->getConfigInstance()->getConfigEntry('hub_bootstrap_nodes')) as $ipPort) {
// Does it match?
if ($ipPortArray[0] == $remoteAddr) {
// Found it!
- $isFound = true;
+ $isFound = TRUE;
// Remember the port number
$this->bootIpPort = $ipPort;
* IP matches listen address. At this point we really don't care
* if we can really listen on that address
*/
- $isFound = true;
+ $isFound = TRUE;
// Remember the port number
$this->bootIpPort = $ipPort;
// Output message
self::createDebugInstance(__CLASS__)->debugOutput('BOOTSTRAP: Re-using found node-id: ' . $this->getNodeId() . '');
} else {
+ // Get an RNG instance
+ $rngInstance = ObjectFactory::createObjectByConfiguredName('rng_class');
+
// Generate a pseudo-random string
- $randomString = $this->generateRandomString(255);
+ $randomString = $rngInstance->randomString(255);
// Hash and encrypt the string so we become a node id (also documented as "hub id")
$this->setNodeId($this->getCryptoInstance()->hashString($this->getCryptoInstance()->encryptString($randomString)));
$searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
// Search for the node number one which is hard-coded the default
- $searchInstance->addCriteria(NodeInformationDatabaseWrapper::DB_COLUMN_NODE_NR, 1);
- $searchInstance->addCriteria(NodeInformationDatabaseWrapper::DB_COLUMN_NODE_TYPE, $this->getRequestInstance()->getRequestElement('mode'));
+ $searchInstance->addCriteria(NodeInformationDatabaseWrapper::DB_COLUMN_NODE_NR , 1);
+ $searchInstance->addCriteria(NodeInformationDatabaseWrapper::DB_COLUMN_NODE_MODE, $this->getRequestInstance()->getRequestElement('mode'));
+ $searchInstance->addCriteria(NodeInformationDatabaseWrapper::DB_COLUMN_NODE_ID , $this->getNodeId());
$searchInstance->setLimit(1);
+ // Remember it for later usage
+ $this->setSearchInstance($searchInstance);
+
// Get a random string
$randomString = $this->generateRamdomString(255);
* "tables". This allows a smooth update for the underlaying
* database table.
*/
- $this->generatePrivateKeyAndHash($searchInstance);
+ $this->generatePrivateKeyAndHash($this->getSearchInstance());
} else {
// Get the node id from result and set it
$this->setPrivateKey(base64_decode($this->getField(NodeInformationDatabaseWrapper::DB_COLUMN_PRIVATE_KEY)));
* Generate it in a private method (no confusion with 'private
* method access' and 'private key' here! ;-)).
*/
- $this->generatePrivateKeyAndHash($searchInstance);
+ $this->generatePrivateKeyAndHash($this->getSearchInstance());
}
}
assert($requestInstance instanceof Requestable);
// Add node number and type
- $criteriaInstance->addCriteria(NodeInformationDatabaseWrapper::DB_COLUMN_NODE_NR, 1);
- $criteriaInstance->addCriteria(NodeInformationDatabaseWrapper::DB_COLUMN_NODE_TYPE, $requestInstance->getRequestElement('mode'));
+ $criteriaInstance->addCriteria(NodeInformationDatabaseWrapper::DB_COLUMN_NODE_NR , 1);
+ $criteriaInstance->addCriteria(NodeInformationDatabaseWrapper::DB_COLUMN_NODE_MODE, $requestInstance->getRequestElement('mode'));
// Add the node id
$criteriaInstance->addCriteria(NodeInformationDatabaseWrapper::DB_COLUMN_NODE_ID, $this->getNodeId());
*/
public function announceToUpperNodes (Taskable $taskInstance) {
// Is this hub node announced?
- if ($this->hubIsAnnounced === true) {
+ if ($this->hubIsAnnounced === TRUE) {
// Already announced!
throw new NodeAlreadyAnnouncedException($this, self::EXCEPTION_HUB_ALREADY_ANNOUNCED);
} // END - if
*/
public function doSelfConnection (Taskable $taskInstance) {
// Debug output
- self::createDebugInstance(__CLASS__)->debugOutput('HUB: Self Connection: START (taskInstance=' . $taskInstance->__toString(). ')');
+ self::createDebugInstance(__CLASS__)->debugOutput('NODE[' . __LINE__ . ']: Self Connection: START (taskInstance=' . $taskInstance->__toString(). ')');
// Get a helper instance
$helperInstance = ObjectFactory::createObjectByConfiguredName('node_self_connect_helper_class', array($this));
$helperInstance->sendPackage($this);
// Debug output
- self::createDebugInstance(__CLASS__)->debugOutput('HUB: Self Connection: FINISHED');
+ self::createDebugInstance(__CLASS__)->debugOutput('NODE[' . __LINE__ . ']: Self Connection: FINISHED');
}
/**
*/
public function initializeListenerPool () {
// Debug output
- self::createDebugInstance(__CLASS__)->debugOutput('HUB: Initialize listener: START');
+ self::createDebugInstance(__CLASS__)->debugOutput('NODE[' . __LINE__ . ']: Initialize listener: START');
// Get a new pool instance
$this->setListenerPoolInstance(ObjectFactory::createObjectByConfiguredName('listener_pool_class', array($this)));
$this->getListenerPoolInstance()->addListener($decoratorInstance);
// Debug output
- self::createDebugInstance(__CLASS__)->debugOutput('HUB: Initialize listener: FINISHED.');
+ self::createDebugInstance(__CLASS__)->debugOutput('NODE[' . __LINE__ . ']: Initialize listener: FINISHED.');
}
/**
* @param $isActive Whether the hub is active
* @return void
*/
- public final function enableIsActive ($isActive = true) {
+ public final function enableIsActive ($isActive = TRUE) {
$this->isActive = (bool) $isActive;
}
*/
public final function isAcceptingAnnouncements () {
// Check it (this node must be active and not shutdown!)
- $acceptAnnouncements = (($this->acceptAnnouncements === true) && ($this->isNodeActive()));
+ $acceptAnnouncements = (($this->acceptAnnouncements === TRUE) && ($this->isNodeActive()));
// Return it
return $acceptAnnouncements;
*/
public function ifNodeHasAnnounced () {
// Debug message
- /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NODE: ifNodeHasAnnounced(): state=' . $this->getStateInstance()->getStateName());
+ /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NODE[' . __LINE__ . ']: ifNodeHasAnnounced(): state=' . $this->getStateInstance()->getStateName());
// Simply check the state of this node
$hasAnnounced = ($this->getStateInstance() instanceof NodeAnnouncedState);
// Debug message
- /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NODE: ifNodeHasAnnounced(): hasAnnounced=' . intval($hasAnnounced));
+ /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NODE[' . __LINE__ . ']: ifNodeHasAnnounced(): hasAnnounced=' . intval($hasAnnounced));
// Return it
return $hasAnnounced;
*/
public function ifNodeHasAnnouncementCompleted () {
// Debug message
- /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NODE: ifNodeHasAnnouncementCompleted(): state=' . $this->getStateInstance()->getStateName());
+ /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NODE[' . __LINE__ . ']: ifNodeHasAnnouncementCompleted(): state=' . $this->getStateInstance()->getStateName());
// Simply check the state of this node
$hasAnnouncementCompleted = ($this->getStateInstance() instanceof NodeAnnouncementCompletedState);
// Debug message
- /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NODE: ifNodeHasAnnouncementCompleted(): hasAnnouncementCompleted=' . intval($hasAnnouncementCompleted));
+ /* DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('NODE[' . __LINE__ . ']: ifNodeHasAnnouncementCompleted(): hasAnnouncementCompleted=' . intval($hasAnnouncementCompleted));
// Return it
return $hasAnnouncementCompleted;
* @param $acceptAnnouncements Whether this node accepts announcements (default: true)
* @return void
*/
- protected final function enableAcceptingAnnouncements ($acceptAnnouncements = true) {
+ protected final function enableAcceptingAnnouncements ($acceptAnnouncements = TRUE) {
$this->acceptAnnouncements = $acceptAnnouncements;
}
return $addressPort;
}
+ /**
+ * "Getter" for address:port array
+ *
+ * @return $addressPortArray An array of a address:port combination for this node
+ */
+ public final function getAddressPortArray () {
+ // Get IP and port
+ $addressPortArray = explode(':', $this->getAddressPort());
+
+ // Return it
+ return $addressPortArray;
+ }
+
/**
* Updates/refreshes node data (e.g. status).
*