+++ /dev/null
-<?php
-/**
- * A general decorator for listeners to communicate to hubs
- *
- * @author Roland Haeder <webmaster@shipsimu.org>
- * @version 0.0.0
- * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Hub Developer Team
- * @license GNU GPL 3.0 or any newer version
- * @link http://www.shipsimu.org
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-class BaseListenerDecorator extends BaseDecorator implements Visitable {
- /**
- * Listener type
- */
- private $listenerType = 'invalid';
-
- /**
- * Protected constructor
- *
- * @param $className Name of the class
- * @return void
- */
- protected function __construct ($className) {
- // Call parent constructor
- parent::__construct($className);
- }
-
- /**
- * Getter for listen address
- *
- * @return $listenAddress The address this listener should listen on
- */
- public final function getListenAddress () {
- return $this->getListenerInstance()->getListenAddress();
- }
-
- /**
- * Getter for listen port
- *
- * @return $listenPort The port this listener should listen on
- */
- public final function getListenPort () {
- return $this->getListenerInstance()->getListenPort();
- }
-
- /**
- * Getter for connection type
- *
- * @return $connectionType Connection type for this listener
- */
- public final function getConnectionType () {
- return $this->getListenerInstance()->getConnectionType();
- }
-
- /**
- * Accepts the visitor to process the visit "request"
- *
- * @param $visitorInstance An instance of a Visitor class
- * @return void
- */
- public function accept (Visitor $visitorInstance) {
- // Visit this decorator
- $visitorInstance->visitDecorator($this);
-
- // Visit the covered class
- $visitorInstance->visitListener($this->getListenerInstance());
- }
-
- /**
- * Getter for listener type.
- *
- * @return $listenerType The listener's type (hub/peer)
- */
- public final function getListenerType () {
- return $this->listenerType;
- }
-
- /**
- * Setter for listener type.
- *
- * @param $listenerType The listener's type (hub/peer)
- * @return void
- */
- protected final function setListenerType ($listenerType) {
- $this->listenerType = $listenerType;
- }
-
- /**
- * Getter for peer pool instance
- *
- * @return $poolInstance A peer pool instance
- */
- public final function getPoolInstance () {
- return $this->getListenerInstance()->getPoolInstance();
- }
-
- /**
- * Monitors incoming raw data from the handler and transfers it to the
- * given receiver instance.
- *
- * @return void
- */
- public function monitorIncomingRawData () {
- // Get the handler instance
- $handlerInstance = $this->getListenerInstance()->getHandlerInstance();
-
- /*
- * Does the deocorated listener (or even a decorator again) have a
- * handler assigned? Remember that a handler will hold all incoming raw
- * data and not a listener.
- */
- if (!$handlerInstance instanceof Networkable) {
- // Skip this silently for now. Later on, this will become mandatory!
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('No handler assigned to this listener decorator. this=' . $this->__toString() . ', listenerInstance=' . $this->getListenerInstance()->__toString());
- return;
- } // END - if
-
- // Does the handler have some decoded data pending?
- if (!$handlerInstance->isRawDataPending()) {
- // No data is pending so skip further code silently
- return;
- } // END - if
-
- // Get receiver (network package) instance
- $receiverInstance = NetworkPackageFactory::createNetworkPackageInstance();
-
- /*
- * There is some decoded data waiting. The receiver instance is an
- * abstract network package (which can be received and sent out) so
- * handle the decoded data over. At this moment it is not needed to
- * know if the decoded data origins from a TCP or UDP connection so it
- * can just be passed over to the network package receiver.
- */
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('BASE-LISTENER-DECORATOR[' . __METHOD__ . ':' . __LINE__ . '] Going to handle over some raw data to receiver instance (' . $receiverInstance->__toString() . ') ...');
- $receiverInstance->addRawDataToIncomingStack($handlerInstance);
- }
-}
-
-// [EOF]
-?>