* @version 0.0.0 * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.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 . */ class ShutdownSocketVisitor extends BaseVisitor implements Visitor { /** * Protected constructor * * @return void */ protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); // Set visitor mode $this->setVisitorMode('socket'); } /** * Creates an instance of this class * * @return $visitorInstance An instance a Visitorable class */ public static final function createShutdownSocketVisitor () { // Get new instance $visitorInstance = new ShutdownSocketVisitor(); // Return the prepared instance return $visitorInstance; } /** * "Visit" method to do the actual request. Here we want to shutdown the * attached socket. * * @param $helperInstance An instance of a ConnectionHelper class * @return void */ public function visitConnectionHelper (ConnectionHelper $helperInstance) { // Do we have reached the retry count? if (ConnectionStatisticsHelper::isConnectRetryExhausted($helperInstance)) { // Also visit the network package to clear any out-going packages NetworkPackageFactory::createNetworkPackageInstance()->accept($this); // Shutdown the connection $helperInstance->doShutdown(); } else { // We can still move on and retry the connection attempt ConnectionStatisticsHelper::increaseConnectRetry($helperInstance); } } /** * "Visit" method to do the actual request. Here we want to "partly shutdown" * the network package instance to clear all stacks. * * @param $packageInstance An instance of a Deliverable class * @return void */ public function visitNetworkPackage (Deliverable $packageInstance) { // Just call it back $packageInstance->clearAllStacks(); } } // [EOF] ?>