* @version 2011-09-15 */ class WebsocketClient { private $_Socket = null; private $errno=null; private $errstr=null; public function __construct($host, $port) { $this->_connect($host, $port); } public function __destruct() { $this->_disconnect(); } public function sendData($data) { // send actual data: fwrite($this->_Socket, "\x00" . $data . "\xff" ) or die('Error:' . $this->errno . ':' . $this->errstr); $wsData = fread($this->_Socket, 2000); $retData = trim($wsData,"\x00\xff"); return $retData; } private function _connect($host, $port) { $key1 = $this->_generateRandomString(32); $key2 = $this->_generateRandomString(32); $key3 = $this->_generateRandomString(8, false, true); $header = "GET / HTTP/1.1\r\n"; $header.= "Upgrade: WebSocket\r\n"; $header.= "Connection: Upgrade\r\n"; $header.= "Host: ".$host.":".$port."\r\n"; $header.= "Origin: http://foobar.com\r\n"; $header.= "Sec-WebSocket-Key: " . $key1 . "\r\n"; //$header.= "Sec-WebSocket-Key2: " . $key2 . "\r\n"; $header.= "\r\n"; // $header.= $key3; $this->_Socket = fsockopen($host, $port, $this->errno, $this->errstr, 2); echo $header; $er=fwrite($this->_Socket, $header); $response = fread($this->_Socket, 2000); /** * @todo: check response here. Currently not implemented cause "2 key handshake" is already deprecated. * See: http://en.wikipedia.org/wiki/WebSocket#WebSocket_Protocol_Handshake */ return true; } private function _disconnect() { fclose($this->_Socket); } private function _generateRandomString($length = 10, $addSpaces = true, $addNumbers = true) { $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"ยง$%&/()=[]{}'; $useChars = array(); // select some random chars: for($i = 0; $i < $length; $i++) { $useChars[] = $characters[mt_rand(0, strlen($characters)-1)]; } // add spaces and numbers: if($addSpaces === true) { array_push($useChars, ' ', ' ', ' ', ' ', ' ', ' '); } if($addNumbers === true) { array_push($useChars, rand(0,9), rand(0,9), rand(0,9)); } shuffle($useChars); $randomString = trim(implode('', $useChars)); $randomString = substr($randomString, 0, $length); return $randomString; } }