Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Разное > Работа: предложения и спрос
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.05.2014, 09:24
ketmar ketmar вне форума
Прохожий
 
Регистрация: 30.05.2014
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Перевод кода с платформы PHP на Delphi

Приветствую, я администрирую сервер игры Rust и передо мной стала задача по написанию программы на Delphi для выполнения элемнатрных задач как массовое ТП людей и Запуск самолета по таймеру. Есть код как реализована отправка команды серверу, но он на PHP. Поможете перевести его на платформу делфи? Возможно вознаграждение.

PHP код:
<?php


class CServerRcon
{
  private 
$password;
  private 
$_sock null;
  private 
$_id 0;
  private 
$isfsock true;

  const 
SERVERDATA_EXECCOMMAND 02;
  const 
SERVERDATA_AUTH 03;
  const 
SERVERDATA_RESPONSE_VALUE 00;
  const 
SERVERDATA_AUTH_RESPONSE 02;

  function 
CServerRcon ($address$port$password)
  {
    
$this->password $password;

    try
    {
      if (
defined('BIND_IP') && function_exists('socket_create') && function_exists('socket_bind'))
      {
        
$this->isfsock false;
        
$this->_sock socket_create(AF_INETSOCK_STREAMSOL_TCP);

        
socket_set_option($this->_sockSOL_SOCKETSO_REUSEADDR1);
        
socket_bind($this->_sockBIND_IP);

        
socket_connect($this->_sock$address$port);

        
socket_set_option($this->_sockSOL_SOCKETSO_SNDTIMEO, array("sec"=>2"usec"=>0));
        
socket_set_option($this->_sockSOL_SOCKETSO_RCVTIMEO, array("sec"=>2"usec"=>0));
      }
      else
      {
        
$this->_sock = @fsockopen($address$port$errno$errstr2);
        
stream_set_timeout($this->_sock2);
      }
    }
    catch (
Exception $err) { }
  }
    
  public function 
Auth ()
  {
    
$PackID $this->_Write(CServerRcon::SERVERDATA_AUTH,$this->password);
    
$ret $this->_PacketRead();

    return (isset(
$ret[1]['ID']) && $ret[1]['ID'] == -1)?0:1;
  }

  private function 
_Write($cmd$s1=''$s2='')
  {
    
$id = ++$this->_id;
    
$data pack("VV",$id,$cmd).$s1.chr(0).$s2.chr(0);
    
$data pack("V",strlen($data)).$data;

    if (
$this->isfsock)
      
fwrite($this->_sock$datastrlen($data));
    else
      
socket_write($this->_sock$datastrlen($data));

    return 
$id;
  }

  private function 
_sock_read($size)
  {
    if (
$this->isfsock)
      return @
fread($this->_sock$size);
    else
      return 
socket_read($this->_sock$size);
  }

  private function 
_PacketRead()
  {
    
$retarray = array();

    while (
$size $this->_sock_read(4)) 
    {
      
$size unpack('V1Size',$size);

      if (
$size["Size"] > 4096)
        
$packet "\x00\x00\x00\x00\x00\x00\x00\x00".$this->_sock_read(4096);
      else 
        
$packet $this->_sock_read($size["Size"]);

      
array_push($retarray,unpack("V1ID/V1Reponse/a*S1/a*S2",$packet));
    }

    return 
$retarray;
  }

  public function 
Read()
  {
    
$Packets $this->_PacketRead();

    foreach(
$Packets as $pack
    {
      if (isset(
$ret[$pack['ID']])) 
      {
        
$ret[$pack['ID']]['S1'] .= $pack['S1'];
        
$ret[$pack['ID']]['S2'] .= $pack['S1'];
      }
      else
      {
        
$ret[$pack['ID']] = array('Reponse' => $pack['Reponse'],
                                  
'S1' => $pack['S1'],
                                  
'S2' =>    $pack['S2'],);
      }
    }

    return 
$ret;
  }

  public function 
sendCommand($command)
  {
    
//$command = '"'.trim(str_replace(' ','" "', $command)).'"';
    
$this->_Write(CServerRcon::SERVERDATA_EXECCOMMAND,$command,'');
  }

  public function 
rconCommand($command)
  {
      
$this->sendCommand($command);
      
$ret $this->Read();
      return 
$ret[2]['S1'];
  }
}

PHP код:
<?php
error_reporting
(E_ALL E_NOTICE);
include_once(
'RustServerRcon.php');

$rcon = new CServerRcon('ip'port'rcon_password');
if(
$rcon->Auth())
{
$rcon->rconCommand('say Welcome to Puff Play!"');
sleep(1);
}
?>
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:49.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter