]> git.mxchange.org Git - hub.git/blob - application/hub/main/handler/message-types/class_BaseMessageHandler.php
Added 'registering of other nodes' ability, added protocol name to relevant method...
[hub.git] / application / hub / main / handler / message-types / class_BaseMessageHandler.php
1 <?php
2 /**
3  * A general message handler
4  *
5  * @author              Roland Haeder <webmaster@ship-simu.org>
6  * @version             0.0.0
7  * @copyright   Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team
8  * @license             GNU GPL 3.0 or any newer version
9  * @link                http://www.ship-simu.org
10  *
11  * This program is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation, either version 3 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23  */
24 class BaseMessageHandler extends BaseHandler {
25         /**
26          * Array with search criteria elements
27          */
28         private $searchData = array();
29
30         /**
31          * Protected constructor
32          *
33          * @param       $className      Name of the class
34          * @return      void
35          */
36         protected function __construct ($className) {
37                 // Call parent constructor
38                 parent::__construct($className);
39
40                 // Init array
41                 $this->searchData = array(
42                         XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_SESSION_ID,
43                         XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_EXTERNAL_IP,
44                         XmlAnnouncementTemplateEngine::ANNOUNCEMENT_DATA_TCP_PORT
45                 );
46         }
47
48         /**
49          * Registers an other node with this node by given message data. The
50          * following data must always be present:
51          *
52          * - session-id  (for finding the node's record together with below data)
53          * - external-ip (hostname or IP number)
54          * - tcp-port    (TCP port for inbound connections)
55          *
56          * @param       $messageArray   An array with all minimum message data
57          * @return      void
58          */
59         protected function registerNodeByMessageData (array $messageData) {
60                 // Get a wrapper instance
61                 $wrapperInstance = ObjectFactory::createObjectByConfiguredName('node_list_db_wrapper_class');
62
63                 // Get a search criteria class
64                 $searchInstance = ObjectFactory::createObjectByConfiguredName('search_criteria_class');
65
66                 // Search for the node's session id and external IP/hostname + TCP port
67                 foreach ($this->searchData as $key) {
68                         // Add criteria
69                         $searchInstance->addCriteria('node_' . $key, $messageData[$key]);
70                 } // END - foreach
71
72                 // Only one entry is fine
73                 $searchInstance->setLimit(1);
74
75                 // Run the query
76                 $resultInstance = $wrapperInstance->doSelectByCriteria($searchInstance);
77
78                 // Is there already an entry?
79                 if ($resultInstance->next()) {
80                         // Entry found
81                         $resultInstance->debugBackTrace('Entry found!');
82                 } else {
83                         // Nothing found, so register it
84                         $wrapperInstance->registerNodeByMessageData($messageData, $this);
85                 }
86         }
87 }
88
89 // [EOF]
90 ?>