X-Git-Url: http://git.pk910.de/?p=PHP-P10.git;a=blobdiff_plain;f=Uplink%2FClient.class.php;h=02567fe5488ac6a08118db31c856a1816970c81f;hp=834448c4ba362fdd67c0b87d328a93b83119e2e0;hb=7f51193ddac01b0540000c756c50167ff015e02a;hpb=d50b17d7f0ebc21c1c70f2ba513e0973ce9fc789 diff --git a/Uplink/Client.class.php b/Uplink/Client.class.php index 834448c..02567fe 100644 --- a/Uplink/Client.class.php +++ b/Uplink/Client.class.php @@ -1,12 +1,10 @@ . * * * ************************************************************************ - * + * * 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 - * - * 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); @@ -84,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; @@ -98,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; @@ -108,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; }