= $startdelay) { $joinlock = FALSE; socket_write($sock, pack('CCCCa64', 68, 13, 0, 0, str_pad('/msg Join Allowed', 64, "\0"))); } } if(socket_select($do, $w, $e, $t)) { while($data = socket_read($sock, 4)) { $header = unpack('Csize/Ctype/Creqi/Cdata', $data); $data = socket_read($sock, $header['size'] - 4); switch($header['type']) { case 3: // TINY, keep-alive if($header['reqi'] === 0 && $header['data'] === 0) { socket_write($sock, pack('CCCC', 4, 3, 0, 0)); } break; case 35: // RES echo "\r\nres"; $name = unpack('a24uname', substr($data, 0, 24)); autospec($name['uname']); break; case 22: // PLP echo "\r\npit"; foreach($guests as $guest) { if($guest->plid == $header['data']) { autospec($guest->uname); } } break; case 21: // NPL echo "\r\nnpl"; if(($header['reqi'] == $header['data']) && $header['reqi'] !== 0) { $pname = unpack('a24val', substr($data, 3, 24)); autospec($pname['val']); } else { if($joinlock) { /* autospec anyone joining while disallowed */ $pname = unpack('a24val', substr($data, 3, 24)); autospec($pname['val']); } else { /* player joins race, join disallowed, timestamped */ $ucid = unpack('Cval', substr($data, 0, 1)); foreach($guests as $guest) { if($guest->ucid == $ucid['val']) { $guest->plid = $header['data']; $joinlock = array('plid' => $guest->plid, 'stamp' => time()); socket_write($sock, pack('CCCCa64', 68, 13, 0, 0, str_pad('/msg Join Not Allowed', 64, "\0"))); break; } } } print_r($guests); } break; case 16: //VOTE echo "\r\nvote"; socket_write($sock, pack('CCCC', 4, 3, 0, 5)); break; case 25: //SPLIT echo "\r\nsplit"; break; case 18: //NCN echo "\r\nncn"; $conn = unpack('a24uname/a24pname', substr($data, 0, 48)); $guests[$conn['uname']] = new guest($conn['uname'], $conn['pname'], $header['data']); print_r($guests); break; case 19: echo "\r\ncnl"; foreach($guests as $guest) { if($guest->ucid == $header['data']) { unset($guests[$guest->uname]); break; } } print_r($guests); break; case 23: echo "\r\npl"; foreach($guests as $guest) { if($guest->plid == $header['data']) { $guest->plid = NULL; if($joinlock['plid'] == $header['data']) { $joinlock = FALSE; socket_write($sock, pack('CCCCa64', 68, 13, 0, 0, str_pad('/msg Join Allowed', 64, "\0"))); } break; } } print_r($guests); break; case 20: // rename echo "\r\ncpr"; $pname = unpack('a24val', substr($data, 0, 24)); foreach($guests as $guest) { if($guest->ucid == $header['data']) { $guests[$guest->uname]->pname = $pname['val']; break; } } break; default: echo "\r\nunk"; break; } } } } socket_close($sock); function autospec($name) { global $sock, $nojoin, $header; socket_write($sock, pack('CCCCa64', 68, 13, 0, 0, str_pad("/spec $name", 64, "\0"))); socket_write($sock, pack('CCCCa64', 68, 13, 0, 0, str_pad("/msg autospec : $name", 64, "\0"))); } class guest { var $uname; var $pname; var $ucid; var $plid; function __construct($uname, $pname, $ucid, $plid = NULL) { foreach(get_class_vars(get_class($this)) as $var => $val) { $this->$var = $$var; } } public function __destruct() { echo "\r\nI'm being destroyed!"; } } ?>