]> git.mxchange.org Git - hub.git/commitdiff
Socket exception added, initListener() basicly finished
authorRoland Häder <roland@mxchange.org>
Wed, 8 Jul 2009 16:38:32 +0000 (16:38 +0000)
committerRoland Häder <roland@mxchange.org>
Wed, 8 Jul 2009 16:38:32 +0000 (16:38 +0000)
.gitattributes
application/hub/exceptions/socket/.htaccess [new file with mode: 0644]
application/hub/exceptions/socket/class_InvalidSocketException.php [new file with mode: 0644]
application/hub/main/listener/class_BaseListener.php
application/hub/main/listener/tcp/class_TcpListener.php
application/hub/main/listener/udp/class_UdpListener.php

index a9acfd1400f9f7948172f507942c4c540744c780..7b6e33dc0591d97179c611e19da4c94b491ae8e1 100644 (file)
@@ -8,6 +8,8 @@ application/hub/data.php -text
 application/hub/debug.php -text
 application/hub/exceptions.php -text
 application/hub/exceptions/.htaccess -text
+application/hub/exceptions/socket/.htaccess -text
+application/hub/exceptions/socket/class_InvalidSocketException.php -text
 application/hub/init.php -text
 application/hub/interfaces/.htaccess -text
 application/hub/interfaces/connectors/.htaccess -text
diff --git a/application/hub/exceptions/socket/.htaccess b/application/hub/exceptions/socket/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/application/hub/exceptions/socket/class_InvalidSocketException.php b/application/hub/exceptions/socket/class_InvalidSocketException.php
new file mode 100644 (file)
index 0000000..79b3609
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+/**
+ * This exception is thrown when the socket resource is invalid or an error
+ * occurs while socket initialization phase.
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 Core 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 <http://www.gnu.org/licenses/>.
+ */
+class InvalidSocketException extends FrameworkException {
+       /**
+        * A Constructor for this exception
+        *
+        * @param               $messageArray   Error message array
+        * @param               $code                   Error code
+        * @return      void
+        */
+       public function __construct(array $messageData, $code) {
+               // Construct the message
+               $message = sprintf("[%s:] Invalid socket (type %s != resource). errno=%s, errstr=%s",
+                       $messageData[0]->__toString(),
+                       $messageData[1],
+                       $messageData[2],
+                       $messageData[3]
+               );
+
+               // Call parent exception constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
index 81ae85d921a80bc961322ab05cd97ea8ad3b69ff..51088aa0519e346af0e512487988e28f422cf21b 100644 (file)
@@ -22,6 +22,9 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 class BaseListener extends BaseHubSystem {
+       // Exception code constants
+       const EXCEPTION_INVALID_SOCKET = 0xa00;
+
        /**
         * Used protocol (Default: invalid, which is indeed invalid...)
         */
@@ -42,6 +45,11 @@ class BaseListener extends BaseHubSystem {
         */
        private $blockingMode = false;
 
+       /**
+        * Socket resource
+        */
+       private $socketResource = null;
+
        /**
         * Protected constructor
         *
@@ -129,6 +137,44 @@ class BaseListener extends BaseHubSystem {
        public final function getProtocol () {
                return $this->protocol;
        }
+
+       /**
+        * Setter for blocking-mode
+        *
+        * @param       $blockingMode   Wether blocking-mode is disabled (default) or enabled
+        * @return      void
+        */
+       protected final function setBlockingMode ($blockingMode) {
+               $this->blockingMode = (boolean) $blockingMode;
+       }
+
+       /**
+        * Checks wether blocking-mode is enabled or disabled
+        *
+        * @return      $blockingMode   Wether blocking mode is disabled or enabled
+        */
+       public final function isBlockingModeEnabled () {
+               return $this->blockingMode;
+       }
+
+       /**
+        * Setter for socket resource
+        *
+        * @param       $socketResource         The socket resource we shall set
+        * @return      void
+        */
+       protected final function setSocketResource ($socketResource) {
+               $this->setSocketResource = $setSocketResource;
+       }
+
+       /**
+        * Getter for socket resource
+        *
+        * @return      $socketResource         The socket resource we shall set
+        */
+       protected final function getSocketResource () {
+               return $this->setSocketResource;
+       }
 }
 
 // [EOF]
index a8a9d3d95da08c5da037b28ca1de91fb877c3e68..61b3dca8356ac79c6102b2c3f0856f0562e6d874 100644 (file)
@@ -56,9 +56,20 @@ class TcpListener extends BaseListener implements Listenable {
         * Initializes the listener by setting up the required socket server
         *
         * @return      void
+        * @throws      InvalidSocketException  Thrown if the socket could not be initialized
         */
        public function initListener() {
-               $this->partialStub('Need to implement this method.');
+               // Try to open a TCP socket
+               $socket = stream_socket_server('tcp://' . $this->getListenAddress() . ':' . $this->getListenPort(), $errno, $errstr);
+
+               // Is the socket a valid resource or do we have any error?
+               if ((!is_resource($socket)) || ($errno > 0)) {
+                       // Then throw an InvalidSocketException
+                       throw new InvalidSocketException(array($this, gettype($socket), $errno, $errstr), BaseListener::EXCEPTION_INVALID_SOCKET);
+               } // END - if
+
+               // Remember the socket in our class
+               $this->setSocketResource($socket);
        }
 }
 
index d37980e3345bb730d748ab96895a3f08fda90f20..b3583e0c756e402bc34fe42e2e28eabbbba41ad8 100644 (file)
@@ -56,9 +56,21 @@ class UdpListener extends BaseListener implements Listenable {
         * Initializes the listener by setting up the required socket server
         *
         * @return      void
+        * @throws      InvalidSocketException  Thrown if the socket is invalid or an
+        *                                                                      error was detected.
         */
        public function initListener() {
-               $this->partialStub('Need to implement this method.');
+               // Try to open a UDP socket
+               $socket = stream_socket_server('udp://' . $this->getListenAddress() . ':' . $this->getListenPort(), $errno, $errstr, STREAM_SERVER_BIND);
+
+               // Is the socket a valid resource or do we have any error?
+               if ((!is_resource($socket)) || ($errno > 0)) {
+                       // Then throw an InvalidSocketException
+                       throw new InvalidSocketException(array($this, gettype($socket), $errno, $errstr), BaseListener::EXCEPTION_INVALID_SOCKET);
+               } // END - if
+
+               // Remember the socket in our class
+               $this->setSocketResource($socket);
        }
 }