// Constants for database column names
const DB_COLUMN_NODE_ID = 'node_id';
const DB_COLUMN_SESSION_ID = 'session_id';
- const DB_COLUMN_IP_PORT = 'ip_port';
+ const DB_COLUMN_EXTERNAL_IP = 'external_ip';
+ const DB_COLUMN_LISTEN_PORT = 'listen_port';
const DB_COLUMN_PRIVATE_KEY = 'private_key';
const DB_COLUMN_PRIVATE_KEY_HASH = 'private_key_hash';
- const DB_COLUMN_NODE_TYPE = 'node_type';
+ const DB_COLUMN_NODE_MODE = 'node_mode';
+ const DB_COLUMN_ACCEPTED_OBJECTS = 'accepted_object_types';
/**
* Protected constructor
// Set the primary key
$dataSetInstance->setUniqueKey(self::DB_COLUMN_NODE_ID);
+ // Get ip:port combination and "explode" it
+ $ipPort = $nodeInstance->getAddressPortArray();
+
+ // Make sure both is valid
+ assert(($ipPort[0] !== 'invalid') && ($ipPort[1] !== 'invalid'));
+
+ // Get an array of all accepted object types
+ $objectList = $nodeInstance->getListFromAcceptedObjectTypes();
+
// Add public node data
- $dataSetInstance->addCriteria(self::DB_COLUMN_NODE_TYPE , $requestInstance->getRequestElement('mode'));
- $dataSetInstance->addCriteria(self::DB_COLUMN_IP_PORT , $nodeInstance->getAddressPort());
+ $dataSetInstance->addCriteria(self::DB_COLUMN_NODE_MODE , $requestInstance->getRequestElement('mode'));
+ $dataSetInstance->addCriteria(self::DB_COLUMN_EXTERNAL_IP , $ipPort[0]);
+ $dataSetInstance->addCriteria(self::DB_COLUMN_LISTEN_PORT , $ipPort[1]);
$dataSetInstance->addCriteria(self::DB_COLUMN_NODE_ID , $nodeInstance->getNodeId());
$dataSetInstance->addCriteria(self::DB_COLUMN_SESSION_ID , $nodeInstance->getSessionId());
$dataSetInstance->addCriteria(self::DB_COLUMN_PRIVATE_KEY_HASH, $nodeInstance->getPrivateKeyHash());
+ $dataSetInstance->addCriteria(self::DB_COLUMN_ACCEPTED_OBJECTS, implode(BaseHubNode::OBJECT_LIST_SEPARATOR, $objectList));
// Return it
return $dataSetInstance;
// Get node instance
$nodeInstance = Registry::getRegistry()->getInstance('node');
- // Add ip:port as criteria
- $searchInstance->addCriteria(self::DB_COLUMN_IP_PORT, $nodeInstance->getAddressPort());
+ // Get ip:port combination and "explode" it
+ $ipPort = $nodeInstance->getAddressPortArray();
+
+ // Make sure both is valid
+ assert(($ipPort[0] !== 'invalid') && ($ipPort[1] !== 'invalid'));
+
+ // Add ip:port/node id as criteria
+ $searchInstance->addCriteria(self::DB_COLUMN_EXTERNAL_IP, $ipPort[0]);
+ $searchInstance->addCriteria(self::DB_COLUMN_LISTEN_PORT, $ipPort[1]);
+ $searchInstance->addCriteria(self::DB_COLUMN_NODE_ID , $nodeInstance->getNodeId());
$searchInstance->setLimit(1);
// Query database and get a result instance back
}
/**
- * Finds a node by given session id
+ * Finds a node locally by given session id
*
* @param $sessionId Session id to lookup
* @return $nodeData Node data array
*/
- public function findNodeBySessionId ($sessionId) {
+ public function findNodeLocalBySessionId ($sessionId) {
// Get search criteria
$searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
// Add all array elements
$handlerInstance->addArrayToDataSet($dataSetInstance, $messageData);
+ // Remove 'node_list'
+ $dataSetInstance->unsetCriteria('node_list');
+
// Run the "INSERT" query
$this->queryInsertDataSet($dataSetInstance);
}
// Add all array elements
$handlerInstance->addArrayToDataSet($dataSetInstance, $messageData);
+ // Remove 'node_list'
+ $dataSetInstance->unsetCriteria('node_list');
+
// Run the "UPDATE" query
$this->queryUpdateDataSet($dataSetInstance);
}