1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Результаты поиска

  1. vieraw
  2. vieraw
  3. vieraw
    Сообщение

    Sendmail.jsp

    <?php $host = '127.0.0.1'; $port = 29300; function socketsend($data, $ip,$port) { if(!@$sock=socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) { throw new Exception("Не удалось связать сокет"); exit(); } socket_connect($sock,$ip,$port); socket_set_block($sock); socket_send($sock, $data, 8192, 0); socket_recv($sock, $buf, 8192, 0); socket_set_nonblock($sock); socket_close($sock); return $buf; } function cuint($data) { if($data < 128) return pack('C', $data); else if($data < 16384) return pack('n', ($data | 0x8000)); else if($data < 536870912) return pack('N', ($data | 0xC0000000)); return pack('C', 224) . pack('N', $data); } function PackString($data) { $data = iconv("UTF-8", "UTF-16LE", $data); return cuint(strlen($data)).$data; } function PackOctet($data) { $data = pack('H*', $data); return cuint(strlen($data)).$data; } function PackLong($data) { $left = 0xffffffff00000000; $right = 0x00000000ffffffff; $l = ($data & $left) >> 32; $r = $data & $right; $res = pack('N*', $l, $r); return $res; } function send($roleid, $title, $context, $id, $count, $max_count, $octet, $proctype, $host = '127.0.0.1', $port = 29100) { $data = pack('N*', rand(9999, 99999), 32, 3); $data .= PackLong($roleid); $data .= PackString($title); $data .= PackString($context); $data .= pack('N2n4', $id, 0, 0, $count, 0, $max_count); $data .= PackOctet($octet); $data .= pack('N*', $proctype, 0, 0, 0, 0, 0) $data = cuint(4214).cuint(strlen($Packet)).$Packet; socketsend($data, $host, $port); } send(4106, 'Отправка сообщения.', 'Сообщение отправленно из PHP.', 33660, 50, 50, '', 0); Не проверял этот вариант, а в таком работает. <html> <head> <title>Выдача награды.</title> <meta charset="utf-8"> </head> <body> <form action="" method="post" class="code" name="data"> <ul> <li>ID:</li> <li><input name="roleid" type="text"/></li> <li>ID предмета</li> <li><input name="id" type="text"/></li> <li>Октет</li> <li><input name="data" type="text"/></li> <li>Привязка</li> <li><input name="proctype" type="text"/></li> <li><input type="submit" name="send" value="Получить"></li> </ul> </form> </body> </html> <?php error_reporting(E_ALL); ini_set("display_errors", 1); use Engine\Components\Protocol; use Engine\Components\Socket; function __autoload($class) { $class = str_replace('\\', '/', $class) . '.php'; include_once $class; } if(isset($_POST['send'])) { $inventory = [ 'id' => 'int', 'post' => 'int', 'reserved1' => 'short', 'count' => 'short', 'reserved2' => 'short', 'max_count' => 'short', 'data' => 'octets', 'proctype' => 'int', 'client_size' => 'int', 'expire_date' => 'int', 'guid1' => 'int', 'guid2' => 'int', ]; $item = [ 'id' => $_POST['id'], 'post' => 0, 'reserved1' => 0, 'count' => 50, 'reserved2' => 0, 'max_count' => 50, 'data' => $_POST['data'], 'proctype' => $_POST['proctype'], 'client_size' => 0, 'expire_date' => 0, 'guid1' => 0, 'guid2' => 0, ]; $socket = new Socket(AF_INET, SOCK_STREAM, SOL_TCP); $socket->connect('127.0.0.1', 29100); $chat = new Protocol($socket); var_dump($chat->Write(4214, [ 'tid' => rand(9999, 99999), 'sysid' => 32, 'sys_type' => 3, 'receiver' => $_POST['roleid'], 'title' => 'Отправка сообщения.', 'context' => 'Сообщение отправленно из PHP.', 'attach_obj' => $item, 'attach_money' => 100000000, ], [ 'tid' => 'int', 'sysid' => 'int', 'sys_type' => 'byte', 'receiver' => 'long', 'title' => 'string', 'context' => 'string', 'attach_obj' => $inventory, 'attach_money' => 'int', ], true)->Read(['retcode' => 'int', 'tid' => 'int'])); }
    Сообщение от: vieraw, 16 сен 2015 в разделе: FW Вопросник
  4. vieraw
  5. vieraw
  6. vieraw
  7. vieraw
  8. vieraw
  9. vieraw
  10. vieraw
    __set используется только в activeRecord (и то при создании сущности) и в Io (для успрощения работы с некоторыми методами). Я про строку 102 в Io где ты позволяешь установить любое свойство, даже те, которых нет. И про строку 75, где ты позволяешь, так же, получить любое свойство. Чтобы этот класс только наследовался. Какой в этом смысл? Вызвать метод из вне ты все равно позволяешь используя __get, но напрямую вызвать нет. Я к тому, что магия __get дает дополнительную нагрузку при вызове, но в данном случаи не несет никакой пользы. Уменьшить зависимость между компонентами. Чтобы можно было "безболезненно" вырезать компонент, или же использовать его отдельно от велосипеда без изменений (или с их минимальным количеством). Бесполезная затея. Тот же модуль работы с базой зависит от модуля Caching. Данная идея только принесет тебе проблемы в дальнейшем. Например, у тебя конфиги вшиты в сами модули и для того, чтобы сделать два проекта на твоем framework'е необходимо его скопировать. Т.е. дважды использовать его не получится т.к. у тебя настройки всего приложения зависят от настроек framework'а и отдельно от него не меняются. Там все так и задумано, чтобы можно было менять только некоторые параметры запроса, все остальное будет взято с конфига. Ниже по коду есть Extended HTTP request - Http::eRequest , который устанавливает опции через curl_setopt_array() public function request( $url_of_target = '', $return_page = null, $request_type = null, $post_data = null, $connect_time_otut = null, $resp_time_out = null, $cookie_file = null, $follow_location = null, $referer = null ) { if (! function_exists('curl_init')) { throw new \Exception('Error! On your hosting is not set extension <strong>cUrl</strong>'); } $this->loadConfig(); if (trim($url_of_target) == '') { throw new \Exception('Incorrect <strong>$url_of_target</strong>'); } if (! isset($connect_time_otut)) { $connect_time_otut = (int)$this->config['curl_options']['connect_timeout']; } if (! isset($resp_time_out)) { $resp_time_out = (int)$this->config['curl_options']['response_timeout']; } if (! isset($return_page)) { $return_page = $this->config['curl_options']['return_page']; } if (! isset($request_type)) { $request_type = strtoupper($this->config['curl_options']['request_type']); } else { $request_type = strtoupper(trim($request_type)); } if (! isset($cookie_file) || trim($cookie_file) == '') { $cookie_file = __DIR__ . DS . 'tmp' . DS . 'cookies' . DS . $this->config['curl_options']['cookie_file']; } else { $cookie_file = __DIR__ . DS . 'tmp' . DS . 'cookies' . DS . $cookie_file; } if (! isset($follow_location)) { $follow_location = $this->config['curl_options']['follow_location']; } $ch = curl_init(); $options[CURLOPT_URL] = $url_of_target; $options[CURLOPT_CUSTOMREQUEST] = $request_type; if (strpos(strtolower(trim($url_of_target)), 'https') == 0) { $options[CURLOPT_SSL_VERIFYPEER] = 0; $options[CURLOPT_SSL_VERIFYHOST] = 0; } if ($return_page) { $options[CURLOPT_RETURNTRANSFER] = 1; } else { $options[CURLOPT_NOBODY] = 1; } $options[CURLOPT_CONNECTTIMEOUT] = (int)$connect_time_otut; if ($this->config['curl_options']['set_user_agent']) { $options[CURLOPT_USERAGENT] = $this->config['curl_options']['user_agent']; } $options[CURLOPT_ENCODING] = ''; $options[CURLOPT_HEADER] = 0; $options[CURLOPT_TIMEOUT] = $resp_time_out; if ($follow_location) { $options[CURLOPT_FOLLOWLOCATION] = 1; $options[CURLOPT_MAXREDIRS] = (int)$this->config['curl_options']['max_redirs']; if ($this->config['curl_options']['auto_referer']) { $options[CURLOPT_AUTOREFERER] = true; } } if (isset($post_data)) { $options[CURLOPT_POST] = 1; $options[CURLOPT_POSTFIELDS] = $post_data; } if ($this->config['curl_options']['save_cookies']) { $options[CURLOPT_COOKIE] = 1; $options[CURLOPT_COOKIEJAR] = $cookie_file . '_jar.txt'; $options[CURLOPT_COOKIEFILE] = $cookie_file . '_file.txt'; } if (isset($referer)) { $options[CURLOPT_REFERER] = trim($referer); } curl_setopt_array($ch, $options); $content = curl_exec($ch); $data = curl_getinfo($ch); $data['err_code'] = curl_errno($ch); $data['err_msg'] = curl_error($ch); $data['content'] = $content; curl_close($ch); return $data; } Ну и как я говорил еще много чего есть, если смотреть глубже.
    Сообщение от: vieraw, 5 апр 2015 в разделе: PW Разработки
  11. vieraw
    Хрень очередная. Громоздкий велосипед, у которого руль к спицам прикреплен. Согласен для данной задачи использовать framework не самая лучшая идея. Причем не документированный framework в котором кроме автора никто не разбирается. Ну и то, что я увидел бегло глянув код. Переход по ссылке http://auto-donate.dev/index.php/main/index/ выкинет 404. В классе Foundation, все методы protected. Зачем? Там же в методе __get на строке 638, лучше было бы использовать method_exists. В __get стоит проверять существует ли свойство или нет, иначе php генерирует Notice, естественно о будет показан, если включено отображение ошибок. Так же позволять устанавливать любое свойство через __set, не есть хорошая идея. Конфиги в различных папках, причем их прилично. В Http::request, функция curl_setopt будет вызвана минимум 7 раз, если не ошибаюсь. Для таких случаев есть: curl_setopt_array. Во многих файлах используется пространство имен MvcBox, которого у тебя нет. Зато есть одноименный класс MvcBox. Сомневаюсь, что ты через use MvcBox подключаешь этот класса, т.к. его ты везде вызываешь из глобального пространства. Конструктор класс не может ничего возвращать. Структура проекта оставляет желать лучшего. Конфиги, как я уже говорил разбросаны. Часть файлов, которые я бы отнес к framework'у в папке bootstrap. PHPDoc не самым лучшим образом сделаны, у меня IDE ругалась не переставая. IDE много на что еще ругается, но не вижу смысла все тут описывать и не на все стоит обращать внимание. И напоследок анализ файла Database.php: [IMG] P.S. Это не упреки, а просто направления для работы.
    Сообщение от: vieraw, 4 апр 2015 в разделе: PW Разработки
  12. vieraw
  13. vieraw
  14. vieraw
  15. vieraw
    P.S. Больше не могу на это смотреть. Если бы я разбирался хорошо в парсинге хекс данных, то и темы бы этой не было. Собственно данный форум и создан для того, чтоб люди могли получать конструктивную помощь на свои вопросы и желательно с примерами для ускорения процесса обучения. К сожалению самые продвинутые в этом плане люди тут, теперь используют данный форум не совсем по прямому назначению, осуществлять поддержку тех, кто только начинает постигать такие вещи, для них форум теперь что то вроде торговой площадки своих разработок и поделиться фрагментом кода, класса и т.п. для них одно и тоже, как и позволить залезть к себе в карман... жаль конечно, что DEV форум становится торговой площадкой. Насчет структуры я примерно понял, но пока плохо представляю практический пример такого такого рода, писать класс, это опять же нужно 100% понимать методы парсинга хекс данных, увы я пока в данном направлении вообще плохо продвинулся, единственное, что пока могу пытаться разобрать хекс методом тыка, как я это и делаю сейчас, хоть и понимаю, что с точки зрения тех, кто лучше понимает в этом деле, это по меньшей мере мазохизм, но... если нет конструктивных ответов, то и приходится, если мало информации на этот счет - страдать мазохизмом... Вы издеваетесь? Это уже не первый пакет, на котором вы обучаетесь. Данный пакет вам был назван месяца три назад, если не больше. В соседней теме вам был показана его структура и опкод, сказано, что не стоит тупо пропускать байты. Вам была названа структура для чтения данных о кланах. И извините конечно, но это уже не первая подобная тема где вы не желаете искать информацию и у меня складывается впечатление, что вы просто ждете что вам дадут готовое. К сожалению самые продвинутые в этом плане люди тут, теперь используют данный форум не совсем по прямому назначению, осуществлять поддержку тех, кто только начинает постигать такие вещи, для них форум теперь что то вроде торговой площадки своих разработок и поделиться фрагментом кода, класса и т.п. для них одно и тоже, как и позволить залезть к себе в карман... жаль конечно, что DEV форум становится торговой площадкой. А какой смысл мне показывать вам свой код? Почему я должен давать его вам бесплатно? Напомню, что вам тут никто ничем не обязан. И уж извините, но в этих двух темах разжевано уже дальше некуда.
    Сообщение от: vieraw, 15 фев 2015 в разделе: PW Вопросник
  16. vieraw
    вроде почти каждый байт декодировал (кроме 7 байтов до цикла), но на 144 все равно ломается парсинг данных. информация о кланах - vector vector<GNET::RawKeyValue, std::allocator<GNET::RawKeyValue> > values; После того как ты прочитал количество элементов в массиве: $clancount = unpack( "c", substr( $buf, $start, 1 ) ); Хоть конечно нужно понять, что длина всегда cuint, ну ладно. Дальше идет сам массив (vector), который представляет из себя key - octets, value - octets. Эти 7 байт получаются из 1 байт (cuint) - количество кланов, 1 байт - длина key (cuint), 4 байта сам key и 1 байт - длина value (cuint). Сам value из себя представляет: 'fid'=>'int', 'name'=>'string', 'level'=>'byte', 'master'=>[ 'roleid'=>'int', 'role'=>'byte' ], 'member'=>[ 'roleid'=>'int', 'role'=>'byte' ], 'announce'=>'string', 'sysinfo'=>'octets' member - vector, т.е. roleid и role читаются в цикле. Если не ошибаюсь, вроде так. P.S. Больше не могу на это смотреть.
    Сообщение от: vieraw, 15 фев 2015 в разделе: PW Вопросник
  17. vieraw
    Хочешь сказать, что в целом при обработке хекса с 1.5.1 у меня ошибок нет, просто в 1.4.4 придется немного изменить перемещение по байтам. Разная структура пакетов 144 и 151? Я не смотрел код, так как не шарю в php, но по результату парсинга видно, что первый клан читается нормально, а остальные - нет. Это означает, что длина описания одного клана разная, поэтому начиная со второго клана идёт сдвиг, который и ломает всё. Можно наугад менять кол-во "пропускаемых ненужных байт", скорее всего получится Но это только мои предположения но странно, что в 151 без проблем парсится, хоть и ожидалось, что структура пакетов в 151 может быть более мудренная,чем в 144. Все же интересно увидеть конструктивный ответ, который поможет понять как же решить проблему? Конструктивный ответ? Брось ты эту затею, не твое это. По теме. Структура не менялась, т.е. она идентична для всех версий. $start = $start+11; //точка отсчета и пропускаем 11 байтов (пока не понял для чего они) $start = $start+7; //точка отсчета и пропускаем 7 байтов (пока не понял для чего они) Не знаю что это? Ну и черт с ним пропущу. Посмотри структуру пакет FactionInfo и все вопросы должны пропасть. Я привел что из себя представляет пакет DBRawRead в прошлой теме, но ты как пропускал мифические цифры, которые меняться, так и пропускаешь.
    Сообщение от: vieraw, 15 фев 2015 в разделе: PW Вопросник
  18. vieraw
  19. vieraw
  20. vieraw