format
[PHP-P10.git] / Uplink / Client.class.php
index c7ecc4cf40440bf942ccac22cd9d0003288a8510..02567fe5488ac6a08118db31c856a1816970c81f 100644 (file)
@@ -1,12 +1,10 @@
 <?php
-/********************************* PHP-P10 ******************************
- *    P10 uplink class by pk910   (c)2011 pk910                         *
- ************************************************************************
- *                          Version 2 (OOP)                             *
+/******************************* PHP-P10 v2 *****************************
+ * Copyright (C) 2011-2012  Philipp Kreil (pk910)                       *
  *                                                                      *
- * PHP-P10 is free software; you can redistribute it and/or modify      *
+ * 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 2 of the License, or    *
+ * 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,      *
  * GNU General Public License for more details.                         *
  *                                                                      *
  * You should have received a copy of the GNU General Public License    *
- * along with PHP-P10; if not, write to the Free Software Foundation,   *
- * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.       *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
  *                                                                      *
  ************************************************************************
- * 
+ *
  *  Uplink/Client.class.php
  *
  * This file contains the basic Client Socket.
  *
- ************************************************************************
- * accessable methods:
- *
- * bool connect(String $host, int $port, String $bind = null, bool $ssl = false, int $blocking = 0)
- *     connects the socket to $host:$port with the provided options
- *
- * void disconnect()
- *     disconnects the socket
- *
- * bool connected()
- *     returns the state of the socket (true if the socket is connected with the server)
- *
- * String[] recv()
- *     tries to receive datas from the socket. Returns null or a array containing the lines received.
- *     this method BLOCKS THE SCRIPT EXECUTION for the defined time if $blocking is set on connect().
- *
- * void send(String $line, String $newline = "\r\n")
- *     tries to send datas through the socket.
- *
- * Array[] getTraffic()
- *     returns an array containing the traffic the socket has received and sent.
- *     index in = incoming (received) traffic count
-       index out = outgoing (sent) traffic count
  */
 
 class Client {
        const CLIENT_RECV_MAX_LINES = 20; //maximum Lines to receive within one recv() call
-       
+
        private $socket;
        private $traffic = array("in" => 0, "out" => 0);
-       
+       private $timeout;
+
        public function connect($host, $port, $bind = null, $ssl = false, $blocking = 0) {
                if($bind)
-                       $options = array('socket' => array('bindto' => $bind.":0"));
+               $options = array('socket' => array('bindto' => $bind.":0"));
                else
-                       $options = array();
+               $options = array();
                $context = stream_context_create($options);
                $sock = stream_socket_client(($ssl ? 'ssl://' : '').$host.':'.$port, $errno, $errstr, 3, STREAM_CLIENT_CONNECT, $context);
                if($sock) {
-                       if($blocking) {
-                               stream_set_blocking($sock, true);
-                               stream_set_timeout($sock, 0, ($blocking / 1000));
-                       } else {
-                               stream_set_blocking($sock, false);
-                       }
+                       $this->timeout = $blocking * 1000;
+                       stream_set_blocking($sock, false);
                        $this->socket = $sock;
                        return true;
                } else
-                       return false;
+               return false;
        }
-       
+
        public function disconnect() {
                if($this->socket == null) return;
                fclose($this->socket);
                $this->socket = null;
        }
-       
+
        public function connected() {
                if($this->socket == null) return false;
                $read = array($this->socket);
@@ -93,12 +64,12 @@ class Client {
                }
                return true;
        }
-       
+
        public function recv() {
                $read = array($this->socket);
                $write= null;
                $except=null;
-               $n=@stream_select($read, $write, $except, 0);
+               $n=@stream_select($read, $write, $except, 0, $this->timeout);
                if($n === FALSE || feof($this->socket)) {
                        $this->socket = false;
                        return null;
@@ -107,7 +78,7 @@ class Client {
                        while(($line = @fgets($this->socket)) != null) {
                                $line=trim($line);
                                if(!empty($line)) {
-                                       if(DEBUG_RAW) echo"[recv] ".$line."\n";
+                                       echo"[recv] ".utf8_decode($line)."\n";
                                        $this->traffic['in'] += strlen($line);
                                        $lines[] = $line;
                                        if(count($lines) >= self::CLIENT_RECV_MAX_LINES) break;
@@ -117,14 +88,14 @@ class Client {
                }
                return null;
        }
-       
+
        public function send($line, $newline = "\r\n") {
                if($this->socket == null) return;
-               if(DEBUG_RAW) echo"[send] ".$line."\n";
+               echo"[send] ".utf8_decode($line)."\n";
                $this->traffic['out'] += strlen($line);
                fwrite($this->socket,$line.$newline);
        }
-       
+
        public function getTraffic() {
                return $this->traffic;
        }