Онлайн по соккету - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > Java

Java В данном форуме вы сможете найти много полезной информации по платформе Java. Подробные статьи, исходные коды и конечно учебники как для новичков так и профессиональных Java разработчиков вы найдёте здесь. Если у вас есть вопрос или хотите поделится своими наработками, пожалуйста, делайте это в этой теме.

Ответ
Опции темы
Непрочитано 20.09.2012, 13:45   #1
Аватар для Dementor
Герой

Автор темы (Топик Стартер) Онлайн по соккету

Обрыскал весь форум/гугл и ничего не нашел. Помню по соккету как-то можно было узнать онлайн сервера. Не помню что надо отправить серверу.
Dementor вне форума Ответить с цитированием
Непрочитано 20.09.2012, 13:53   #2
Аватар для Ashe
Олдфаг

По умолчанию Re: Онлайн по соккету

Цитата:
Сообщение от Неверный Посмотреть сообщение
Обрыскал весь форум/гугл и ничего не нашел. Помню по соккету как-то можно было узнать онлайн сервера. Не помню что надо отправить серверу.
Статус или число?
__________________
Fortuna - non penis, in manus non recipe.
Ashe вне форума Ответить с цитированием
Непрочитано 20.09.2012, 13:56   #3
Аватар для Dementor
Герой

Автор темы (Топик Стартер) Re: Онлайн по соккету

Цитата:
Сообщение от Ashe Посмотреть сообщение
Статус или число?
не, статус и так понятно. Число )
Dementor вне форума Ответить с цитированием
Непрочитано 20.09.2012, 14:12   #4
Аватар для Ashe
Олдфаг

По умолчанию Re: Онлайн по соккету

Но это для PTS.

<?  
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); 
?>
Code: PHP
__________________
Fortuna - non penis, in manus non recipe.
Ashe вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 20.09.2012, 14:39   #5
Аватар для 4ipolino
Пользователь

По умолчанию Re: Онлайн по соккету

4ipolino вне форума Отправить сообщение для 4ipolino с помощью ICQ Ответить с цитированием
Непрочитано 20.09.2012, 16:32   #6
Аватар для Dementor
Герой

Автор темы (Топик Стартер) Re: Онлайн по соккету

Цитата:
Сообщение от 4ipolino Посмотреть сообщение
но мне не для этого=) Мне для скрипта своего.
Dementor вне форума Ответить с цитированием
Ответ

Метки
lineage 2, online, socket, онлайн по соккету


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QoS, tcp/udp порты популярных онлайн игр Pitiy Операционные системы / Operating systems 3 09.06.2010 13:21
Законы проектирования онлайн миров (Раф Костер) - для Администраторов! GoodShadow Курилка / Yak floor 0 23.02.2010 16:35
Онлайн игроков. warman4ik Серверная часть 18 17.01.2010 01:04
Как преувиличить онлайн в статистике своего сервера? MAZDIK Движки сайтов (CMS) 13 19.07.2008 11:24


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 00:04. Часовой пояс GMT +3.

Вверх