From: <wrt...@us...> - 2008-01-11 22:51:58
|
Revision: 7513 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7513&view=rev Author: wrtlprnft Date: 2008-01-11 14:52:00 -0800 (Fri, 11 Jan 2008) Log Message: ----------- Added a copy of my hacked together AA library. Sparse documentation will follow on the forums Added Paths: ----------- private/wrtlprnft/serverinfo.php Added: private/wrtlprnft/serverinfo.php =================================================================== --- private/wrtlprnft/serverinfo.php (rev 0) +++ private/wrtlprnft/serverinfo.php 2008-01-11 22:52:00 UTC (rev 7513) @@ -0,0 +1,757 @@ +<?php +function filtercolors($str) { + return ereg_replace('0x......', '', $str); +} +class nMessage { + var $descriptor; + var $id; + var $len; + var $buf; + var $bufpos; + + static $clientid = false; + static $debug = false; + static $receivedids = array(); + static $mid = 1; + + static function readMsg($sock) { + $msg = new nMessage(); + $header = fread($sock, 6); + if($header === false || $header === '') { + return false; + } + while(true) { // read until we get something that might be the + // start of a packet. No clue where the extra zeroes + // come from… + $data = unpack('ndescriptor/nid/nlen', $header); + $msg->descriptor = $data['descriptor']; + if($msg->descriptor == 0) { + $header = substr($header, 2) . fread($sock, 2); + } else { + break; + } + } + $msg->id = $data['id']; + if(nMessage::$debug) { + print("id<" . $msg->id . '> '); + } + if($msg->id != 0) { + nMessage::ack($sock, $msg->id); + } + $msg->len = $data['len']; + //if($msg->len % 2 == 1) { + // ++$msg->len; + //} + if($msg->len > 0) { + //$msg->buf = fread($sock, $msg->len*2); + $msg->buf = fread($sock, $msg->len*2); + } else { + $msg->buf = ''; + } + $msg->bufpos = 0; + if($msg->id != 0) { + //print_r(nMessage::$receivedids); + if(in_array($msg->id, nMessage::$receivedids)) { + if(nMessage::$debug) { + print('Reveived duplicate message ' . $msg->id . "\n"); + } + // fetch another message + return nMessage::readMsg($sock); + } else { + nMessage::$receivedids[] = $msg->id; + } + } + //print_r($msg); + return $msg; + } + static function makeMsg($descriptor, $id = false) { + if($id === false) { + $id = nMessage::$mid++; + } + $msg = new nMessage(); + $msg->descriptor = $descriptor; + $msg->id = $id; + $msg->len = 0; + $msg->buf = ''; + return $msg; + } + static function ack(&$sock, $msgid) { + if(!is_array($msgid)) { + $msgid = array($msgid); + } + $msg = nMessage::makeMsg(1, 0); + foreach($msgid as $id) { + $msg->writeshort($id); + } + $msg->write($sock); + ob_flush(); + flush(); + } + + function write($sock) { + $this->len = strlen($this->buf) / 2; + $buffer = pack('nnn', $this->descriptor, $this->id, $this->len); + $buffer .= $this->buf; + if(nMessage::$clientid !== false) { + $buffer .= pack('n', nMessage::$clientid); + } + fwrite($sock, $buffer); + } + + function readshort() { + $data = unpack('nshort', substr($this->buf, $this->bufpos, 2)); + $this->bufpos += 2; + return $data['short']; + } + + function writeshort($short) { + $this->buf .= pack('n', $short); + $this->bufpos += 2; + } + + function writeint($int) { + $a = $int & 0xFFFF; + $b = ($int - $a) >> 16; + //if($a > 0x8FFF) { + // ++$b; + //} + $this->writeshort($a); + $this->writeshort($b); + } + + function readint() { + $a = $this->readshort(); + $b = $this->readshort(); + return ($b << 16)|$a; + } + + function readfloat() { + $trans = $this->readint(); + $mant = $trans & ((1 << 25) - 1); + $negative = $trans & (1 << 25); + $exp = ($trans - $mant - $negative) >> 26; + + $x = $mant / (1 << 25); + if($negative != 0) { + $x = -$x; + } + + while($exp >= 6) { + $exp -=6; + $x *= 64.; + } + while($exp > 0) { + --$exp; + $x *= 2.; + } + return $x; + } + + function readbool() { + return $this->readshort() != 0; + } + + function writebool($bool) { + $this->writeshort($bool ? 1 : 0); + } + + function readstring() { + $len = $this->readshort(); + if($len % 2 == 1) { + ++$len; + } + $data = unpack('n*', substr($this->buf, $this->bufpos, $len)); + $this->bufpos += $len; + $ret = ''; + foreach($data as $i) { + $c1 = $i & 255; + $c2 = ($i >> 8) & 255; + if($c1 > 127) { + ++$c2; + $c2 %= 256; + } + if($c1 != 0) { + $ret .= chr($c1); + if($c2 != 0) { + $ret .= chr($c2); + } + } + } + return($ret); + } + + function writestring($string) { + if($string == '') { + $string = ' '; + } + $l = strlen($string) + 1; + $this->writeshort($l); + for($i = 0; $i + 1 < $l; $i += 2) { + $c1 = ord($string[$i]); + if($l - 1 != $i) { + $c2 = ord($string[$i + 1]); + } else { + $c2 = 0; + } + if($c1 > 127) { + $c2 += 255; + $c2 %= 256; + } + $this->writeshort(($c2 << 8) | $c1); + } + if($i < $l) { + $this->writeshort(0); + } + } + + function remaining() { + return strlen($this->buf) - $this->bufpos ; + } + + function end() { + return $this->remaining() <= 0; + } +} + + +class serverinfo { + var $host; + var $port; + + var $port_by_server; + var $host_by_server; + + var $name; + var $num_players_by_server; + var $version_min; + var $version_max; + var $version; + + var $max_players; + var $players; + + function serverinfo($host, $port) { + $this->host = $host; + $this->port = $port; + $sock = fsockopen('udp://' . $host . ':' . $port . ''); + stream_set_timeout($sock, 1); + $msg = nMessage::makeMsg(0x35, 0); + $msg->write($sock); + $msg = nMessage::readMsg($sock); + if($msg === false) { + $this->name = "Unreachable"; + return; + } + + $this->port_by_server = $msg->readint(); + $this->host_by_server = $msg->readstring(); + + $this->name = $msg->readstring(); + $this->num_players_by_server = $msg->readint(); + + if($msg->end()) return; + $this->version_min = $msg->readint(); + $this->version_max = $msg->readint(); + $this->version = $msg->readstring(); + + if($msg->end()) return; + $this->max_players = $msg->readint(); + + if($msg->end()) return; + $players = $msg->readString(); + $this->players = explode("\n", substr($players, 0, strlen($players) - 1)); + + fclose($sock); + } +} + +function getMasterInfo($host, $port = 4533) { + $sock = fsockopen('udp://' . $host . ':' . $port . ''); + + $msg = nMessage::makeMsg(11, 0x24); //login + $msg->writeshort(0x14); // rate + $msg->writeshort(0); // bb = bigbrother + $msg->writeint(0); // ver.min + $msg->writeint(0xff); // ver.max + $msg->write($sock); + $msg = nMessage::readMsg($sock); + if($msg->descriptor != 5) { + return "rejected!"; + //print_r($msg); + } + nMessage::$clientid = $msg->readshort(); + $version_min = $msg->readint(); + $version_max = $msg->readint(); + //print("clientid $clientid; version_min $version_min; version_max $version_max"); + + + // request small server info + $msg = nMessage::makeMsg(52, 2); + //$msg->writeint(256*256 + 0x75*256 + 0x20); + //$msg->writeint(0); + //print_r($msg); + $msg->write($sock); + + $ips = array(); + $ports = array(); + + $cont = true; + + while($cont) { + $msg = nMessage::readMsg($sock); + //print_r($msg); + switch($msg->descriptor) { + case 3: // login_deny; you're actually supposed to get this 0.2 + // seconds after the master has finished sending you + // its information + $cont = false; + break; + case 50: // SmallServerDescriptor + $ports[] = $msg->readint(); + $ips[] = $msg->readstring(); + } + } + array_multisort($ips, $ports); + $servers = array(); + foreach($ips as $i => $ip) { + $servers[] = array('host' => $ip, 'port' => $ports[$i]); + } + return $servers; +} +class nNetObject { + static $objects = array(); + + var $id; + var $owner; + + function readBasics($msg) { + $this->id = $msg->readshort(); + $this->owner = $msg->readshort(); + nNetObject::$objects[$this->id] = &$this; + //print_r(nNetObject::$objects); + } + function setBasics() { + $this->id = connection::$current->getFreeID(); + $this->owner = nMessage::$clientid; + nNetObject::$objects[$this->id] = &$this; + } + function writeBasics($descriptor) { + $msg = nMessage::makeMsg($descriptor); + $msg->writeshort($this->id); + $msg->writeshort($this->owner); + return $msg; + } + //function nNetObject($id, $owner = nMessage::$clientid) { + // $this->id = $id; + // $this->owner = $owner; + // nNetObject::$objects[$this->id] = &$this; + //} + function read($msg) { + } + function write($socket) { + } +} +$foo = new nNetObject; +class ePlayerNetId extends nNetObject { + static $players = array(); + static function readMsg($msg) { + $o = new ePlayerNetId; + $o->readBasics($msg); + ePlayerNetId::$players[$o->owner] = &$o; + $o->read($msg); + return $o; + } + static function createPlayer($r, $g, $b, $name) { + $o = new ePlayerNetId(); + $o->setBasics(); + $o->r = $r; + $o->g = $g; + $o->b = $b; + $o->pingCharity = 100; + $o->name = $name; + $o->ping = 0; + $o->flags = 2; // newSpectate + $o->score = 0; + $o->newdisc = 0; + $o->nextteamid = 0; + $o->currentteamid = 0; + $o->favoriteNumberOfPlayersPerTeam = 42; + $o->nameTeamAfterMe = false; + return $o; + } + function write($sock) { + $msg = $this->writeBasics(201); + $msg->writeshort($this->r); + $msg->writeshort($this->g); + $msg->writeshort($this->b); + $msg->writeshort($this->pingCharity); + $msg->writestring($this->name); + $msg->writeint(0); // TODO: writefloat + $msg->writeshort($this->flags); + $msg->writeint($this->score); + $msg->writeshort($this->newdisc); + //print('Playermsg: '); + //print_r($msg); + $msg->write($sock); + // TODO: the rest + } + function read($msg) { + $this->r = $msg->readshort(); + $this->g = $msg->readshort(); + $this->b = $msg->readshort(); + $this->pingCharity = $msg->readshort(); + $this->name = $msg->readstring(); + $this->ping = $msg->readfloat(); + $this->flags = $msg->readshort(); + $this->score = $msg->readint(); + $this->newdisc = $msg->readshort(); + if(!$msg->end()) { + $this->nextteamid = $msg->readshort(); + $this->currentteamid = $msg->readshort(); + $this->favoriteNumberOfPlayersPerTeam = $msg->readint(); + $this->nameTeamAfterMe = $msg->readbool(); + } + } +} +class eTeam extends nNetObject { + static function readMsg($msg) { + $o = new eTeam; + $o->readBasics($msg); + $o->read($msg); + return $o; + } + function read($msg) { + $this->r = $msg->readshort(); + $this->g = $msg->readshort(); + $this->b = $msg->readshort(); + $this->name = $msg->readstring(); + $this->maxPlayers = $msg->readint(); + $this->maxImbalance = $msg->readint(); + $this->score = $msg->readint(); + } +} +//$info = new serverinfo('81.169.132.36', 4534); +//print_r($info); +// +//print_r(getMasterInfo('master1.armagetronad.net')); + +//$servers = array(); +//$master = getMasterInfo('master3.armagetronad.net'); +//foreach($master as $server) { +// print_r(new serverinfo($server['host'], $server['port'])); +//} +//print_r($servers); + +class connection { + static $ID_PREFETCH=50; + static $current=50; + + var $sock; + var $prefetchedIDs = array(); + var $sentMsgs = array(); + var $connectiontime; + + function haveFreeID() { + return count($this->prefetchedIDs) > 0; + } + function getFreeID() { + if(count($this->prefetchedIDs) < connection::$ID_PREFETCH / 2) { + // request a couple of new IDs + $msg = nMessage::makeMsg(21); // request a couple of new ids + $msg->writeShort(connection::$ID_PREFETCH / 2); + $this->send($msg); + } + if(count($this->prefetchedIDs) > 0) { + $ret = $this->prefetchedIDs[0]; + array_splice($this->prefetchedIDs, 0, 1); + //print('Returning ID ' . $ret); + //debug_print_backtrace(); + return $ret; + } else { + return false; //no ID, sorry… + } + } + + function connection($host, $port=4534) { + connection::$current = $this; + $this->sock = fsockopen('udp://' . $host . ':' . $port . ''); + $this->connectiontime = microtime(true); + } + + function logout() { + $msg = nMessage::makeMsg(7); + $this->send($msg); + } + + function send($msg) { + if($msg->id != 0) { + $this->sentMsgs[$msg->id] = &$msg; + } + $msg->write($this->sock); + } + + function doLogin() { + $msg = nMessage::makeMsg(11, 0x24); //login + $msg->writeshort(0x14); // rate + $msg->writeshort(0); // bb = bigbrother + $msg->writeint(0); // ver.min + $msg->writeint(0xff); // ver.max + $this->send($msg); + $msg = nMessage::readMsg($this->sock); + if($msg->descriptor != 5) { + return false; + } + nMessage::$clientid = $msg->readshort(); + $version_min = $msg->readint(); + $version_max = $msg->readint(); + + $msg = nMessage::makeMsg(25); // ready to get objects + $this->send($msg); + + $this->getFreeID(); // make sure we have some IDs ready to use + + $this->mainLoop(); + } + + function loopfunc() { + } + + function mainLoop() { + $cont = true; + while($cont) { + $this->loopfunc(); + $msg = nMessage::readMsg($this->sock); + //print_r($msg); + switch($msg->descriptor) { + case 1: $cont = $this->handleAck ($msg); break; + case 3: $cont = $this->handleLoginDeny ($msg); break; + case 60: $cont = $this->handleConfig ($msg); break; + case 9: $cont = $this->handleCentreMessage ($msg); break; + case 10: $cont = $this->handleVersionControl ($msg); break; + case 8: $cont = $this->handleConsoleMessage ($msg); break; + case 203: $cont = $this->handleChat ($msg); break; + case 28: $cont = $this->handleSync ($msg); break; + case 202: $cont = $this->handlePlayerReomoval ($msg); break; + case 312: $cont = $this->handleFullscreenMessage($msg); break; + case 201: $cont = $this->handleNewPlayer ($msg); break; + case 20: $cont = $this->handleFreeID ($msg); break; + case 220: $cont = $this->handleNewTeam ($msg); break; + case 24: $cont = $this->handleNetSync ($msg); break; + } + } + nMessage::$clientid = false; + } + function onAck($ids) { + foreach($ids as $id) { + if(isset($this->sentMsgs[$id])) { + unset($this->sentMsgs[$id]); + } else { + } + } + } + function handleAck ($msg) { + $ids = array(); + while(!$msg->end()) { + $ids[] = $msg->readshort(); + } + $this->onAck($ids); + return true; + } + function onLoginDeny($reason) { + } + function handleLoginDeny ($msg) { + $this->onLoginDeny($msg->readstring()); + return false; + } + function onConfig($name, $value) { + } + function handleConfig ($msg) { + $name = $msg->readstring(); + if($msg->remaining() == 2) { + $value = $msg->readbool(); + } else if($msg->remaining() == 4) { + $value = $msg->readint() . ' '; + $msg->bufpos-=4; + $value .= $msg->readfloat(); + } else if($msg->remaining() > 2) { + $value = $msg->readstring(); + } else { + $value = null; + } + $this->onConfig($name, $value); + return true; + } + function onCentreMessage($text) { + } + function handleCentreMessage ($msg) { + $this->onCentreMessage($msg->readstring()); + return true; + } + function onVersionControl($min, $max) { + } + function handleVersionControl ($msg) { + $min = $msg->readint(); + $max = $msg->readint(); + $this->onVersionControl($min, $max); + return true; + } + function onConsoleMessage($text) { + } + function handleConsoleMessage ($msg) { + $this->onConsoleMessage($msg->readstring()); + return true; + } + function onChat($playerid, $text) { + } + function handleChat ($msg) { + $playerid = $msg->readshort(); + $text = $msg->readstring(); + $this->onChat($playerid, $text); + return true; + } + function onSync($timeout, $sync_sn_netObjects, $c_sync) { + $msg = nMessage::makeMsg(27); + $msg->writeshort($c_sync); + $this->send($msg); + } + function handleSync ($msg) { + $timeout = $msg->readfloat(); + $sync_sn_netObjects = $msg->readshort(); + $c_sync = $msg->readshort(); + $this->onSync($timeout, $sync_sn_netObjects, $c_sync); + return true; + } + function onPlayerRemoval($id) { + } + function handlePlayerReomoval ($msg) { + $this->onPlayerRemoval($msg->readshort()); + return true; + } + function onFullscreenMessage($title, $text, $timeout) { + } + function handleFullscreenMessage($msg) { + $title = $msg->readstring(); + $text = $msg->readstring(); + $timeout = $msg->readfloat(); + $this->onFullscreenMessage($title, $text, $timeout); + return true; + } + function onNewPlayer($player) { + } + function handleNewPlayer ($msg) { + $this->onNewPlayer(ePlayerNetId::readMsg($msg)); + return true; + } + function onFreeID($ids) { + foreach($ids as $id) { + $this->prefetchedIDs[] = $id; + } + } + function handleFreeID ($msg) { + $ids = array(); + while(!$msg->end()) { + $id = $msg->readshort(); + $count = $msg->end() ? 1 : $msg->readshort(); + while($count > 0) { + --$count; + $ids[] = ++$id; + } + } + $this->onFreeID($ids); + return true; + } + function onNewTeam($player) { + } + function handleNewTeam ($msg) { + $this->onNewTeam(eTeam::readMsg($msg)); + return true; + } + function onNetSync(&$obj) { + } + function handleNetSync ($msg) { + $id = $msg->readshort(); + if(!isset(nNetObject::$objects[$id])) { + //print("Ignoring sync for object ". $id . "\n"); + } else { + nNetObject::$objects[$id]->read($msg); + //print("Synced object ". $id . "\n"); + $this->onNetSync($objects[$id]); + } + return true; + } +} + +class bot extends connection { + function bot($host, $port, $nick, $message) { + $this->connection($host, $port); + $this->doLogin(); + $this->nick = $nick; + $this->message = $message; + } + + var $gotPlayer = false; + var $playerid = 0; + + function loopfunc() { + if($this->haveFreeID() && !$this->gotPlayer) { + $p = ePlayerNetId::createPlayer(15, 0, 0, $this->nick); + $p->write($this->sock); + $this->playerid = $p->id; + $this->gotPlayer = true; + + $msg = nMessage::makeMsg(200); + $msg->writeshort($this->playerid); + $msg->writeString($this->message); + $this->send($msg); + $this->logout(); + } + } + + function onLoginDeny($reason) { + print_r($reason); + } + function onNewPlayer($player) { + //print_r($player); + } + function onConsoleMessage($txt) { + //print($txt . "\n"); + } + function onChat($id, $txt) { + //print($txt . "\n"); + } + function onConfig($name, $value) { + //print($name . ' => ' . $value . "\n"); + } +} + +class scores extends connection { + function scores($host, $port=4534) { + $this->connection($host, $port); + $this->doLogin(); + } + + var $printed = false; + var $objects; + + function loopfunc() { + if(!$printed && microtime(true) - $this->connectiontime > 3) { + $this->objects = nNetObject::$objects; + $this->logout(); + $this->printed = true; + } + } + + function onLoginDeny($reason) { + if(!$this->printed) { + print($reason); + } + } + function onNewPlayer($player) { + //print_r($player); + } +} + +//$obj = new bot('arma', 4539); +//print_r(new serverinfo('arma', 4539)); +//print_r(getMasterInfo('localhost')); +?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-01-12 07:31:02
|
Revision: 7514 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7514&view=rev Author: wrtlprnft Date: 2008-01-11 23:31:07 -0800 (Fri, 11 Jan 2008) Log Message: ----------- Implemented querying the server if we are synced to cut down on needless waiting time. Thanks z-man for telling me how :-) Modified Paths: -------------- private/wrtlprnft/serverinfo.php Modified: private/wrtlprnft/serverinfo.php =================================================================== --- private/wrtlprnft/serverinfo.php 2008-01-11 22:52:00 UTC (rev 7513) +++ private/wrtlprnft/serverinfo.php 2008-01-12 07:31:07 UTC (rev 7514) @@ -530,6 +530,7 @@ case 10: $cont = $this->handleVersionControl ($msg); break; case 8: $cont = $this->handleConsoleMessage ($msg); break; case 203: $cont = $this->handleChat ($msg); break; + case 27: $cont = $this->handleSyncAck ($msg); break; case 28: $cont = $this->handleSync ($msg); break; case 202: $cont = $this->handlePlayerReomoval ($msg); break; case 312: $cont = $this->handleFullscreenMessage($msg); break; @@ -621,6 +622,13 @@ $this->onSync($timeout, $sync_sn_netObjects, $c_sync); return true; } + function onSyncAck($c_sync) { + } + function handleSyncAck ($msg) { + $c_sync = $msg->readshort(); + $this->onSyncAck($c_sync); + return true; + } function onPlayerRemoval($id) { } function handlePlayerReomoval ($msg) { @@ -728,19 +736,41 @@ function scores($host, $port=4534) { $this->connection($host, $port); $this->doLogin(); + $this->lastsyncrequest = $this->connectiontime; } var $printed = false; var $objects; + var $lastsyncrequest; + var $syncid = 42; function loopfunc() { - if(!$printed && microtime(true) - $this->connectiontime > 3) { + if(!$printed && microtime(true) - $this->lastsyncrequest > .1) { + $this->lastsyncrequest = microtime(true); + $msg = nMessage::makeMsg(28); + $msg->writeint(0); // actually a real, but z-man says it will + // be ignored anyways + $msg->writeshort(1); + $msg->writeshort($this->syncid++); + //print_r($msg); + $this->send($msg); + } + if(!$printed && microtime(true) - $this->connectiontime > 5) { + // didn't get a syncAck, but we can't wait forever $this->objects = nNetObject::$objects; $this->logout(); $this->printed = true; } } + function onSyncAck($c_sync) { + if(!$printed && $c_sync < $this->syncid && $c_sync >= 42) { + $this->objects = nNetObject::$objects; + $this->logout(); + $this->printed = true; + } + } + function onLoginDeny($reason) { if(!$this->printed) { print($reason); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-01-12 12:02:40
|
Revision: 7515 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7515&view=rev Author: wrtlprnft Date: 2008-01-12 04:02:41 -0800 (Sat, 12 Jan 2008) Log Message: ----------- Read the options and URI field when querying a server, if availabe. Modified Paths: -------------- private/wrtlprnft/serverinfo.php Modified: private/wrtlprnft/serverinfo.php =================================================================== --- private/wrtlprnft/serverinfo.php 2008-01-12 07:31:07 UTC (rev 7514) +++ private/wrtlprnft/serverinfo.php 2008-01-12 12:02:41 UTC (rev 7515) @@ -230,6 +230,9 @@ var $max_players; var $players; + var $options; + var $uri; + function serverinfo($host, $port) { $this->host = $host; $this->port = $port; @@ -239,7 +242,7 @@ $msg->write($sock); $msg = nMessage::readMsg($sock); if($msg === false) { - $this->name = "Unreachable"; + $this->name = false; return; } @@ -261,6 +264,9 @@ $players = $msg->readString(); $this->players = explode("\n", substr($players, 0, strlen($players) - 1)); + $this->options = $msg->readString(); + $this->uri = $msg->readString(); + fclose($sock); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-03-16 22:54:47
|
Revision: 8327 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8327&view=rev Author: wrtlprnft Date: 2008-03-16 15:54:54 -0700 (Sun, 16 Mar 2008) Log Message: ----------- Global IDs of nicks are now read out, too, if available. Also contains some other small fixes Modified Paths: -------------- private/wrtlprnft/serverinfo.php Modified: private/wrtlprnft/serverinfo.php =================================================================== --- private/wrtlprnft/serverinfo.php 2008-03-16 22:16:35 UTC (rev 8326) +++ private/wrtlprnft/serverinfo.php 2008-03-16 22:54:54 UTC (rev 8327) @@ -229,6 +229,7 @@ var $max_players; var $players; + var $global_ids; var $options; var $uri; @@ -267,6 +268,12 @@ $this->options = $msg->readString(); $this->uri = $msg->readString(); + $this->global_ids = array(); + + if($msg->end()) return; + + $this->global_ids = explode("\n", $msg->readString()); + fclose($sock); } } @@ -451,6 +458,7 @@ class connection { static $ID_PREFETCH=50; static $current=50; + static $debug=false; var $sock; var $prefetchedIDs = array(); @@ -544,6 +552,7 @@ case 20: $cont = $this->handleFreeID ($msg); break; case 220: $cont = $this->handleNewTeam ($msg); break; case 24: $cont = $this->handleNetSync ($msg); break; + default: if(connection::$debug) print_r($msg); } } nMessage::$clientid = false; @@ -685,10 +694,14 @@ function handleNetSync ($msg) { $id = $msg->readshort(); if(!isset(nNetObject::$objects[$id])) { - //print("Ignoring sync for object ". $id . "\n"); + if(connection::$debug) { + print("Ignoring sync for object ". $id . "\n"); + } } else { nNetObject::$objects[$id]->read($msg); - //print("Synced object ". $id . "\n"); + if(connection::$debug) { + print("Synced object ". $id . "\n"); + } $this->onNetSync($objects[$id]); } return true; @@ -698,9 +711,9 @@ class bot extends connection { function bot($host, $port, $nick, $message) { $this->connection($host, $port); - $this->doLogin(); $this->nick = $nick; $this->message = $message; + $this->doLogin(); } var $gotPlayer = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |