09-20-2012, 01:45 PM
Обрыскал весь форум/гугл и ничего не нашел. Помню по соккету как-то можно было узнать онлайн сервера. Не помню что надо отправить серверу.
Онлайн по соккету
|
09-20-2012, 01:45 PM
Обрыскал весь форум/гугл и ничего не нашел. Помню по соккету как-то можно было узнать онлайн сервера. Не помню что надо отправить серверу.
09-20-2012, 01:53 PM
Неверный Написал:Обрыскал весь форум/гугл и ничего не нашел. Помню по соккету как-то можно было узнать онлайн сервера. Не помню что надо отправить серверу. Статус или число?
Fortuna - non penis, in manus non recipe.
09-20-2012, 01:56 PM
Ashe Написал:Статус или число? не, статус и так понятно. Число )
09-20-2012, 02:12 PM
Но это для PTS.
[src=php]<? class ServerStatus { private $ip,$port,$interval,$timeout; public function __construct($ip='127.0.0.1',$port=2106,$interval=30,$timeout=1) { $this->ip=$ip; $this->port=$port; $this->interval=$interval; $this->timeout=$timeout; } public function GetStatusFromAuth() { $status=array(); $f=@fsockopen($this->ip,$this->port,$errno,$errstr,$this->timeout); if ($f) { do { $sec=floor($this->timeout); $msec=($this->timeout-$sec)*1000; socket_set_timeout($f,$sec,$msec); $buf=fread($f,2); if (strlen($buf)!=2) break; $a=unpack('vsize',$buf); $size=$a['size']-2; if ($size<1) break; $buf=fread($f,$size); if (strlen($buf)!=$size) break; fwrite($f,"\x03\x00\xFE",3); $buf=fread($f,2); if (strlen($buf)!=2) break; $a=unpack('vsize',$buf); $size=$a['size']-2; if ($size<1) break; $buf=fread($f,$size); if (strlen($buf)!=$size) break; if (ord($buf[0])!=0xFE) break; if (strlen($buf)<3) break; $amount=ord($buf[1])+ord($buf[2])*256; $buf=substr($buf,3); if (strlen($buf)!=$amount*4) break; $a=unpack('v'.($amount*2),$buf); for ($i=0;$i<$amount;$i++) $status[$a[$i*2+1]]=$a[$i*2+2]; } while (false); fclose ($f); } return $status; } public function GetStatus() { $fn=dirname(__FILE__).'/status.txt'; $status=array(); fclose(fopen($fn,'a+b')); $f=@fopen($fn,'r+b'); if ($f) { flock($f,LOCK_EX); $cache=unserialize(fread($f,1024)); $status=@$cache['status']; $time=@$cache['time']; if (!IsSet($status) || !IsSet($time)) { $status=array(); $time=0; } if (time()-$time>$this->interval) { $new=$this->GetStatusFromAuth(); foreach ($status as $id => $value) { $c=&$status[$id]; $c['on']=false; $c['cur']=0; } foreach ($new as $id => $value) { if (!IsSet($status[$id])) $status[$id]=array('on'=>false,'cur'=>0,'max'=>0); $c=&$status[$id]; $c['on']=true; $c['cur']=$new[$id]; if ($c['cur']>$c['max']) $c['max']=$c['cur']; } $cache=array('status'=>$status,'time'=>time()); $s=serialize($cache); rewind($f); ftruncate($f,0); fwrite($f,$s,strlen($s)); } fclose($f); } return $status; } public function GetText($id,$online,$offline) { $status=$this->GetStatus(); if (IsSet($status[$id])) { $c=&$status[$id]; $c['cur']=$c['cur']+24; $file = fopen("online.txt", "w"); fwrite($file, $c['cur']); fclose($file); } else { $c=array('on'=>false,'cur'=>0,'max'=>0); } $res=str_replace(array('%c','%m'),array($c['cur'],$c['max']),$c['on']?$online:$offline); return $res; } } $status=new ServerStatus('127.0.0.1'); $online='%c'; $offline='%c'; echo $status->GetText(7,$online,$offline); ?>[/src]
Fortuna - non penis, in manus non recipe.
09-20-2012, 02:39 PM
09-20-2012, 04:32 PM
4ipolino Написал: но мне не для этого=) Мне для скрипта своего. |
« Предыдущая | Следующая »
|