daily pastebin goal
84%
SHARE
TWEET

Ryan Stewart

a guest Jul 8th, 2010 3,926 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3.  
  4. $conn = create_connection('localhost',1740);
  5. $arr_sockets = array($conn);
  6. $handshake = false;
  7.  
  8. while (true)
  9. {
  10.         $changed = $arr_sockets;
  11.         socket_select($changed,$write=NULL,$except=NULL,NULL);
  12.         foreach($changed as $socket)
  13.         {
  14.                 echo $socket . " and " . $conn . "\n";
  15.                 if($socket == $conn)
  16.                 {
  17.                         $connection=socket_accept($conn);
  18.                         if($connection)
  19.                         {
  20.                                 array_push($arr_sockets,$connection);                          
  21.                         }
  22.                 } else {
  23.                         $bytes = @socket_recv($socket,$buffer,2048,0);
  24.                         if(!$handshake)
  25.                         {
  26.                                 echo "handshaking\n";
  27.                                 dohandshake($socket,$buffer);
  28.                                 sendStockData($socket);
  29.                         }
  30.                 }
  31.         }
  32. }
  33.  
  34. function create_connection($host,$port)
  35. {
  36.         $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
  37.        
  38.         if (!is_resource($socket)) {
  39.                 echo 'Unable to create socket: '. socket_strerror(socket_last_error()) . PHP_EOL;
  40.         } else {
  41.                 echo "Socket created.\n";
  42.         }
  43.        
  44.         if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
  45.             echo 'Unable to set option on socket: '. socket_strerror(socket_last_error()) . PHP_EOL;
  46.         } else {
  47.                 echo "Set options on socket.\n";
  48.         }
  49.        
  50.         if (!socket_bind($socket, $host, $port)) {
  51.             echo 'Unable to bind socket: '. socket_strerror(socket_last_error()) . PHP_EOL;
  52.         } else {
  53.                 echo "Socket bound to port $port.\n";
  54.         }
  55.        
  56.         if (!socket_listen($socket,SOMAXCONN)) {
  57.                 echo 'Unable to listen on socket: ' . socket_strerror(socket_last_error());
  58.         } else {
  59.                 echo "Listening on the socket.\n";
  60.         }
  61.         return $socket;
  62. }      
  63.  
  64. function dohandshake($socket,$buffer){
  65.         global $handshake;
  66.         list($resource,$host,$origin) = getheaders($buffer);
  67.         $upgrade  = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
  68.                                 "Upgrade: WebSocket\r\n" .
  69.                                 "Connection: Upgrade\r\n" .
  70.                                 "WebSocket-Origin: " . $origin . "\r\n" .
  71.                                 "WebSocket-Location: ws://" . $host . $resource . "\r\n" .
  72.                                 "\r\n";
  73.         socket_write($socket,$upgrade.chr(0),strlen($upgrade.chr(0)));
  74.         $handshake = true;
  75.         return $handshake;
  76. }
  77.  
  78. function getheaders($req){
  79.   $r=$h=$o=null;
  80.   if(preg_match("/GET (.*) HTTP/"   ,$req,$match)){ $r=$match[1]; }
  81.   if(preg_match("/Host: (.*)\r\n/"  ,$req,$match)){ $h=$match[1]; }
  82.   if(preg_match("/Origin: (.*)\r\n/",$req,$match)){ $o=$match[1]; }
  83.   return array($r,$h,$o);
  84. }
  85.  
  86. function sendStockData($socket)
  87. {
  88.         echo $socket;
  89.         $stock_price = rand(30,32);    
  90.         while(true)
  91.         {
  92.                 socket_write($socket,chr(0).$stock_price.chr(255),strlen(chr(0).$stock_price.chr(255)));
  93.                 echo $stock_price . "sent: " .
  94.                 sleep(1);
  95.  
  96.                 // Generate a random number that will represent how much our stock price
  97.                 // will change and then make that number a decimal and attach it to the
  98.                 // previous price.
  99.                 $stock_offset = rand(-50,50);
  100.                 $stock_price = $stock_price + ($stock_offset/100);
  101. //              echo "$stock_price\n";                 
  102.         }
  103.  
  104. }
  105.  
  106. ?>
RAW Paste Data
Top