Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> getServerinfo 
:(
    Опции темы
Voyager
Дата 23.3.2005, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



Пишу программу для получения сведений с игрового сервера. И вот возник вопрос. Можно ли на дельфи написать аналог функции getServerinfo() из php или такая функция уже есть?

Код

Syntax:                                                                                  
getServerinfo($serveradr,$serverport,$serverport2,2000,"scores"), where:             
                                                                                             
$serveradr=IP or FQDN (Fully qualified domain-name of server,                           
$serverport=portnumber, where game is hosted (default 2234), has to be set - even if default, 
$serverport2=portnumber to do extended GSA query on, default ($serverport+1=2235) 


Вот пример, как выглядит на php:

Код

if ($status=$ofp->getServerinfo($serveradr,$serverport,$serverport2,2000,"score")) 
{
  echo "<center><h2><b>".$ofp->m_servervars["hostname"]."</b></h2></center>";
};

Буду благодарен, если кто-то поможет разобраться с этим вопросом.
PM   Вверх
<Spawn>
Дата 23.3.2005, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 1
Всего: 64



Смотри функции gethostbyname, getservbyport, getservbyname (или их WSA аналоги) из WinSock, ну или GetAddressByName и т.д. из WinSock2(Файл индевский можно взять idWinSock2)


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Voyager
Дата 23.3.2005, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



<Spawn>
Спасибо за ответ.
Да, я думал над этим. Но не знаю, как в тех функциях выцепить значения, которые возвращает getServerinfo:
Код

$ofp->m_servervars["hostname"]
$ofp->m_servervars["gamename"]
$ofp->m_servervars["gamever"]
$ofp->m_servervars["reqver"]
$ofp->m_servervars["servertype"]
$ofp->m_servervars["gamestatus"]
$ofp->m_servervars["numplayers"]
$ofp->m_servervars["maxplayers"]
...

Даже пока не представляю, как узнать значения этих переменных.
Есть полный текст програмы на php, но как его перевести в дельфи? Может кто нибудь пример кода функции на Дельфи привести?

Это сообщение отредактировал(а) Voyager - 23.3.2005, 11:46
PM   Вверх
Voyager
Дата 24.3.2005, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



Нашел описание функции (если это она конечно) на:
http://www.nexgenserver.com/cgi-bin/loadfr...tServerInfo.htm
http://msdn.microsoft.com/archive/default...._iface_40xl.asp
http://www.faircom.com/support/ctreeDocs/h...le=ctplu136.htm
http://www.rembo.com/rembo/docs2/rembo/GetServerInfo.p.html

Можно ли как нибудь на код Дельфи перевести?

Это сообщение отредактировал(а) Voyager - 24.3.2005, 15:47
PM   Вверх
Guest
Дата 25.3.2005, 15:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нет, не то это было (про предыдущий пост).
Добыл исходники на php, может кто-нибудь глянет, и как это на дельфи сформировать?
http://www.ofp.ussr-online.net/nasheorujie/voyager/ofpr.rar (2 кб)
Вроде все понятно, но в сях и php не силен, не могу перевести элементарные функции.
Громко прошу помощи smile
  Вверх
Voyager
Дата 26.3.2005, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 532
Регистрация: 8.2.2005

Репутация: нет
Всего: 18



Есть функции
Код

    function getServerData($query,$command,$serveraddress,$portnumber,$waittime) {
        $serverdata        ="";
        $serverdatalen=0;
        
        if ($waittime< 500) $waittime= 500;
        if ($waittime>2000) $waittime=2000;
        $waittime=doubleval($waittime/1000.0);

        if (!$ofpsocket=fsockopen("udp://".$serveraddress,$portnumber,$errnr)) {
            $this->errmsg="No connection";
            return false;
        }
        
        socket_set_blocking($ofpsocket,true);
        if ($this->system==0) socket_set_timeout($ofpsocket,0,500000);
        fwrite($ofpsocket,$command,strlen($command));    

        $starttime=$this->timenow();
        if ($query=="ofpinfo") {
            do {
                $serverdata.=fgetc($ofpsocket);
                $serverdatalen++;
                $socketstatus=socket_get_status($ofpsocket);
                if ($this->timenow()>($starttime+$waittime)) {
                    $this->errmsg="Connection timed out";
                    fclose($ofpsocket);
                    return false;
                }
            } while ($socketstatus["unread_bytes"]);
        } else {
            do {
                $serverdata.=fgetc($ofpsocket);
                $serverdatalen++;
                $socketstatus=socket_get_status($ofpsocket);
                if ($this->timenow()>($starttime+$waittime)) {
                    $this->errmsg="Connection timed out";
                    fclose($ofpsocket);
                    return false;
                }
            } while (substr($serverdata,strlen($serverdata)-7)!="\\final\\");
            // Is data complete ?
            // This strange doublecheck is needed since OFP serverdata might arrive out of order
            if ((substr($serverdata,strlen($serverdata)-7)!="\\final\\") || (substr($serverdata,1,8)!="gamename")) {
                $this->errmsg="Data incomplete";
                return false;
            }
        }
        fclose($ofpsocket);
        return $serverdata;        
    }


Код

function getServerinfo ($serveraddress,$portnumber,$portnumber2,$timeout, $sortby) {

        $cmd="\x00\x02\x12\x00\x01\x60\x98\x24\xF7\xBE\xD0\xD2\x11\x95\xEA\x00\xA0\xC9\xA5\x7F\x0B";
        $cmd2="\\status\\";
        $this->serverquerytype=false;

        if ($portnumber2==$portnumber) $portnumber2=$portnumber+1;

        if ($portnumber2<>0) {
            if ($serverdata=$this->getServerData("gsinfo",$cmd2,$serveraddress,$portnumber2,$timeout)) {
                $serverdata=substr($serverdata,1,strlen($serverdata)-7);

                $this->serverquerytype="extended";


                // Split data and fill into array

                // Mivo:    Added STR_REPLACE to solve problem with empty TEAM string, now replaced by space character
                //    Originally was :
                //    $name_tok = strtok ($serverdata,"\\");
                //
                
                $name_tok = strtok (str_replace("\\\\","\\ \\",$serverdata),"\\");
                $val_tok  = strtok ("\\");
                while (strlen($name_tok)) {
                    if ($name_tok!="final") {
                        $vars[$name_tok]=$val_tok;
                    }    
                    $name_tok = strtok ("\\");
                    $val_tok  = strtok ("\\");
                }

                while (list($key,$data) = each ($vars)) {
                    if (!strncmp($key,"player_",7)) {
                        $player[substr($key,7)]["name"]=$data;
                    } elseif (!strncmp($key,"team_",5)) {
                        $player[substr($key,5)]["team"]=$data;
                    } elseif (!strncmp($key,"score_",6)) { 
                        $player[substr($key,6)]["score"]=$data;
                    } elseif (!strncmp($key,"deaths_",7)) {
                        $player[substr($key,7)]["deaths"]=$data;
                    } else {
                        $this->m_servervars[$key]=$data;
                    }
                }

                // Mivo: Server type test - if new netcode (variable IMPL) set variable to "extnew"

                if (isset($this->m_servervars["impl"])) {
                    $this->serverquerytype="extnew";
                }

                // Move playerinfo to membervariable
                for ($i=0;$i<$this->m_servervars["numplayers"];$i++) {
                    $this->m_playerinfo[$i]=array("name"=>$player[$i]["name"],"team"=>$player[$i]["team"],"score"=>$player[$i]["score"],"deaths"=>$player[$i]["deaths"]);
                }        

                // If there are players on the server we sort them by frags        
                if ($this->m_servervars["numplayers"]>0 && $sortby=="scores") {
                    usort($this->m_playerinfo,"scoresort");
                } elseif ($this->m_servervars["numplayers"]>0 && $sortby=="deaths") {
                    usort($this->m_playerinfo,"deathsort");
                } elseif ($this->m_servervars["numplayers"]>0 && $sortby=="teams") {
                    usort($this->m_playerinfo,"teamsort");
                } elseif ($this->m_servervars["numplayers"]>0 && $sortby=="names") {
                    usort($this->m_playerinfo,"namesort");
                } else {
                    // If NO or INCORRECT sortvalue given - players will be sorted by score
                    if ($this->m_servervars["numplayers"]>0) usort($this->m_playerinfo,"scoresort");
                }

                if ($this->serverquerytype=="extnew") {
                
                // Mivo: For OFP:Res (new netcode) - correct values of variables

                    // max players minus 2
                    if ($this->m_servervars["maxplayers"]-2<=0) {
                        $maxplayers="Not set";
                    } else {
                        $maxplayers=$this->m_servervars["maxplayers"]-2;
                    }
                    $this->m_servervars["maxplayers"]=$maxplayers;

                    // Password protected

                    if ($this->m_servervars["password"]==0) {
                        $this->m_servervars["servertype"]="Public";
         } else {
                        $this->m_servervars["servertype"]="Private";
         }

                    // game status

         switch ($this->m_servervars["gstate"]) {
            case "2":
                $this->m_servervars["gamestatus"]="No mission selected";
                break;
            case "6":
                $this->m_servervars["gamestatus"]="Players assignment";
                break;
            case "9":
                $this->m_servervars["gamestatus"]="Debriefing";
                break;
            case "13":
                $this->m_servervars["gamestatus"]="Briefing";
                break;
            case "14":
                $this->m_servervars["gamestatus"]="Game in progress";
         }
    
                    // time limit
                    $this->m_servervars["param1"]=$this->m_servervars["param1"]/60;

                } else {

                // Mivo: For OFP, call original function

                    $this->correctdata ($serverdata2);
                }
            }
        }
        return $this->serverquerytype;
    }


Если я правильно понял, на дельфи это нужно сделать через UDPSocket. Но как это организовать, как заставить UDPSocket переслать нужные команды и получить данные?
I need help.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.