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

[поиск, вопрос] Замена iweb

Тема в разделе 'PW Web', создана пользователем Botchal, 24 июн 2010.

  1. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    Код:
    Шаровый?
    нет, закрытый под десятью замками)), к нему ещё будет прилагаться API для сторонних скриптов статистики ну и собсно сами скрипты статистики(онлайн карта игроков, юзербары, топы) в последствии игровой чат на сайте(когда с gamedbd закончим начнём изучать другие подсервера)

    Скороее всего API будет очень простое, скрипту надо будет послать 3 гет параметра айвебу для получения информации, будет выглядеть гдето так

    file_get_contents("путь/путь/путь/api.php?adminpass=sdg67sdg5sd6hsd6h6&opcode=3013&value=41");

    где adminpass это ваш уникальный код(чтобы посторонние не получали информацию), opcode опкод, тип операции, value - значение

    в данном примере мы запрашиваем xml персонажа с id 41. Просто, правда?! Что мы и хотели
  2. Chaos13 Проверенный II Пользователи

    Сообщения:
    10
    Лайки:
    11
    Репутация:
    0
    Наивный. Как будто при помощи одной операции можно XML вытащить.
    Чесно скажу, что API будет сложнее. :lol:

    А file_get_contents - это вообще неправильно. Вытащищь код файла api.php и что с ним делать будешь? А учитывая твои знаки вопроса и проч, то вообще ничего не вытащишь. И вообще, API планировал делать совсем по другому.

    Но до API еще как до луны, будем о нем думать когда закончу все протоколы.

    ПЫСЫ: Сделал маленькую Factory, для производства классов протоколов по строке.
    Например (дописал вектор и класс для демонстрации):
    Код:
    FactoryGMarObj('gdelivery','PublicChat',79,'Byte channel, Byte emotion, Int roleid, Int localsid, Octets msg, ~GFactionMemberVector members, ~GRoleBase base');
    создаст следующий файл /protocol/gdelivery/PublicChat.php:
    Код:
    <?php
    /* 
    Marshal Object Class Definition
    DO NOT MODIFY THIS COMMENT BLOCK
    CN:{|GPublicChat|}
    UN:{|PublicChat|}
    OC:{|79|}
    PK:{|gdelivery|}
    PR:{|byte channel, byte emotion, int roleid, int localsid, octets msg, ~GFactionMemberVector members, ~GRoleBase base|}
    DP:{|GMarObj,GFactionMemberVector,GRoleBase|}
    */
    class GPublicChat extends GMarObj {
    public $channel;
    public $emotion;
    public $roleid;
    public $localsid;
    public $msg;
    public $members;
    public $base;
    public function getoc() { 
    return 79; 
    }
    public function mar(GConnection &$p) {
    $p->mByte($this->channel);
    $p->mByte($this->emotion);
    $p->mInt($this->roleid);
    $p->mInt($this->localsid);
    $p->mOctets($this->msg);
    $p->marshal($this->members);
    $p->marshal($this->base);
    }
    public function unmar(GConnection &$p) {
    $this->channel=$p->uByte();
    $this->emotion=$p->uByte();
    $this->roleid=$p->uInt();
    $this->localsid=$p->uInt();
    $this->msg=$p->uOctets();
    $this->members = new GFactionMemberVector;
    $p->unmarshal($this->members);
    $this->base = new GRoleBase;
    $p->unmarshal($this->base);
    }
    };
    Код:
    (когда с gamedbd закончим начнём изучать другие подсервера)
    Я уже начал изучать gdelivery, guniquenamed и gfactiond. Затем пойдут glinkd и gamed.

    Кстати программа даже не для распространения в ЗР.
  3. TopicStarter Overlay

    Botchal MMORPG-DEVS.RU Пользователи

    Сообщения:
    182
    Лайки:
    66
    Репутация:
    0
    какраз правильно! это единственный способ передавать и получать данные обсолютно безопасно и очень просто.

    Ведь почти у всех сайт на хостинге и используются CMS системы. Поэтому пользователям будет проще всего добавить функцию взятия контента.

    Например как у меня( с недавних пор у нас=)) ) - есть сайт на хостинге и сервер, там и там бд только на локале, какбы сам знаешь) при включённом сервере http://pw.j-games.org/ игрок заполнив поля регистрации игрового аккаунта заставляет скрипт проверить поля и если поля удовлетворяют условиям то и идёт

     file_get_contents(http://........./.../.../index.php?admin_key=......&login=логин&pass=пасс);

    где admin_key это уникальный ключ, по login и пасс создаётся новая учётная запись в бд

    функция возвращает результат от скрипта на сервере. Учитывая то что длинна admin_key может быть сколь угодно длинной а сам скрипт лежать в хз какой директории (например в http://IP:80808080/5ddf5hh6dfhdfh5/6fh6sdf87h66sd8fh6/index.php) а в корне и в 5ddf5hh6dfhdfh5 лежит .htaccess с deny from all

    то потенциальный злоумышленник ничего не сможет сделать. Так ещё он будет введён в заблуждение что БД не на локале)


    Как понять - 
    Оо какие знаки вопроса?)) перед первой гет переменной?

    Также надо делать и снашими запросами к iweb у.

    ЗЫ практику извлечения данных по file_get_contents я практиковал ещё со времён когда занимался мангосом.


    Хм... Наивный это комплимент или оскорбление?) Я не вкоем случае не спорю что маршалинг и анмаршалинг дело совсем не простое, но лучше сделать себеже удобнее чтоб потом не парится. По мне так самый наипростейший вариант это посыласть 3 $_GET передачи по средством file_get_contents. Потому как внешнии скрипты не должны никак обрабатывать данные. Можно как угодно разбыть обработку между внешними скриптами и твоим iweb ом но мне кажется что всю обработку должен делать именно iweb. Это будет более рациональнее, 

    Но в любом случаи автор ты и тебе решать!

    Если что потом просто мод напишу, чтобы проста какбы была видна
  4. Chaos13 Проверенный II Пользователи

    Сообщения:
    10
    Лайки:
    11
    Репутация:
    0
    На счет наивного - нужно 6 запросов на то чтобы полностью сформировать xml роли в старом формате (айвеба).
    А если вытаскивать всю инфу (список друзей, факцию, итд) то и того больше.
  5. gouranga Эксперт Программист Пользователи Open Source Contributor White List

    Сообщения:
    67
    Лайки:
    142
    Пол:
    Мужской
    Репутация:
    0
    Страна:
    Netherlands Netherlands
    Хаос13 прав. file_get_contents не безопасен и может кое-где и не работать.

    CURL безопаснее, хотя тоже может где-то не работать.
    Код:
    <?php
    //$url - ссылка на api
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 3);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $this->prepareSecureData($action)); // этот $this->prepareSecureData должен подготавливать POST параметры в зависимости от экшена 
    $result = curl_exec($ch);
    curl_close($ch);
    if($result !== false)
    {
    $data = json_decode($result, true);
    if($data !== false) // если вернули rpc
    return $data;
    }
    return false;
    
  6. gouranga Эксперт Программист Пользователи Open Source Contributor White List

    Сообщения:
    67
    Лайки:
    142
    Пол:
    Мужской
    Репутация:
    0
    Страна:
    Netherlands Netherlands
    клево!

    [​IMG]
    1 человеку нравится это.
  7. Chaos13 Проверенный II Пользователи

    Сообщения:
    10
    Лайки:
    11
    Репутация:
    0
    Машина Франкенштейна прямо... А у тебя хотя бы проверяется дошли данные или нет?

    -----------------------------------------------------------------------------

    Уже кстати разобрал 85% протоколов gamedbd. :lol:
    На счет кода gouranga:
    Код:
    ...
    <!--#########-->
    <!-- gamedbd -->
    <class name="RoleId">
    <var name="roleid" type="int"/>
    </class>
    ...
    <!-- 3013 GetRoleBase -->
    <class name="RoleBaseRes">
    <var name="retcode" type="int"/>
    <var name="value" type="GRoleBase"/>
    </class>
    <class name="GetRoleBase" arg="RoleId" res="RoleBaseRes" type="3013"/>
    ...
  8. gouranga Эксперт Программист Пользователи Open Source Contributor White List

    Сообщения:
    67
    Лайки:
    142
    Пол:
    Мужской
    Репутация:
    0
    Страна:
    Netherlands Netherlands

    Хаос13, он наверняка еще собаку перед функцией ставит, чтобы ошибок не было... а я говорю, нет ничего лучше cURL.

    и раз уж пошло обсуждение того, как надо защищать api часть — предложу свою точку зрения.

    твой админкей на самом деле называется token. токен это обычно что-то невероятно сложное для запоминания, чтобы нельзя было его навскидку кому-то передать.
    просто так, параметром, токены не передают (или передают, где данные особой роли не значат, например, тот же bit.ly передает в открытую, а всякие смс-агрегаторы, мерчанты — нет). обычно, есть сид (sid, seken или еще там всякие названия), который является результатом какой-то хеш-функции от этого token и каких-то весомых данных запроса.

    например, $sha_sid = sha1($token . $data), где $data — весь список параметров, передаваемых гет-запросом.

    Код:
    ?sid={$sha_sid}&{$data}
    поясню, почему нужно именно так (разумеется подразумевается, что входные данные нормально обрабатываются, и там нет явных и средних дыр безопасности. от остальных не защитит никто):
    1) потенциальный злоумышленник даже получив каким-то образом отправляемые данные (или даже несколько раз их) — не сможет воспроизвести исходный ключ или алгоритм как этот sid был сделан. по крайней мере — это будет ОЧЕНЬ сложно. главное, задействовать как можно больше блоков динамичных данных и не передавать голый токен.
    2) этот метод автоматически добавляет в процесс обмена алгоритм проверки целостности.

    p.s. скоро на эмудеве буду уроки по программированию вести) Си :lol:
    1 человеку нравится это.
  9. JoLan Команда форума Администратор AngeliCore Программист

    Сообщения:
    1.061
    Лайки:
    948
    Пол:
    Мужской
    Репутация:
    6
    Команда:
    AngeliCore
    Страна:
    Russian Federation Russian Federation
    [offtop]
    :lol:
    [/offtop]
  10. Chaos13 Проверенный II Пользователи

    Сообщения:
    10
    Лайки:
    11
    Репутация:
    0
    Ну тогда нужно в блок данных добавлять random число. Как это делается в VK Secure API.
    А в качестве проверочного например md5(secret . $params . $rand)
  11. Chaos13 Проверенный II Пользователи

    Сообщения:
    10
    Лайки:
    11
    Репутация:
    0
    Кстати, список протоколов gamedbd:
    Код:
    GNET::GetTaskDataRpc::GetTaskDataRpc(a1, (int)GNET::__stub_GetTaskDataRpc, 115, (int)v294, (int)v292);
    GNET::PutTaskDataRpc::PutTaskDataRpc(a1, (int)GNET::__stub_PutTaskDataRpc, 135, (int)v298, (int)v296);
    GNET::PutFriendList::PutFriendList(a1, (int)GNET::__stub_PutFriendList, 200, (int)v282, (int)v280);
    GNET::GetFriendList::GetFriendList(a1, (int)GNET::__stub_GetFriendList, 201, (int)v278, (int)v276);
    GNET::PutMessage::PutMessage(a1, (int)GNET::__stub_PutMessage, 215, (int)v286, (int)v284);
    GNET::GetMessage::GetMessage(a1, (int)GNET::__stub_GetMessage, 216, (int)v290, (int)v288);
    
    GNET::DBStockBalance::DBStockBalance(a1, (int)GNET::__stub_DBStockBalance, 413, (int)v491, (int)v489);
    GNET::DBStockTransaction::DBStockTransaction(a1, (int)GNET::__stub_DBStockTransaction, 414, (int)v487, (int)v485);
    GNET::DBStockLoad::DBStockLoad(a1, (int)GNET::__stub_DBStockLoad, 415, (int)v483, (int)v481);
    GNET::DBStockCommission::DBStockCommission(a1, (int)GNET::__stub_DBStockCommission, 416, (int)v495, (int)v493);
    GNET::DBStockCancel::DBStockCancel(a1, (int)GNET::__stub_DBStockCancel, 417, (int)v499, (int)v497);
    
    AnnounceZoneid                                                       505
    GNET::GetAddCashSN::GetAddCashSN(a1, (int)GNET::__stub_GetAddCashSN, 514, (int)v479, (int)v477);
    AddCash	515
    AddCash_Re 516
    
    SyncSellInfo                                                               609
    GNET::DBSellPoint::DBSellPoint(a1, (int)GNET::__stub_DBSellPoint, 611, (int)v132, (int)v130);
    GNET::DBSyncSellInfo::DBSyncSellInfo(a1, (int)GNET::__stub_DBSyncSellInfo, 612, (int)v463, (int)v461);
    GNET::DBSellTimeout::DBSellTimeout(a1, (int)GNET::__stub_DBSellTimeout, 613, (int)v467, (int)v465);
    GNET::DBSellCancel::DBSellCancel(a1, (int)GNET::__stub_DBSellCancel, 614, (int)v471, (int)v469);
    GNET::DBBuyPoint::DBBuyPoint(a1, (int)GNET::__stub_DBBuyPoint, 615, (int)v459, (int)v457);
    TransBuyPoint 616
    TransBuyPoint_Re 617
    GNET::DBTransPointDeal::DBTransPointDeal(a1, (int)GNET::__stub_DBTransPointDeal, 618, (int)v475, (int)v473);
    
    GNET::DBAuctionOpen::DBAuctionOpen(a1, (int)GNET::__stub_DBAuctionOpen, 810, (int)v433, (int)v431);
    GNET::DBAuctionBid::DBAuctionBid(a1, (int)GNET::__stub_DBAuctionBid, 811, (int)v437, (int)v435);
    GNET::DBAuctionList::DBAuctionList(a1, (int)GNET::__stub_DBAuctionList, 812, (int)v451, (int)v449);
    GNET::DBAuctionGet::DBAuctionGet(a1, (int)GNET::__stub_DBAuctionGet, 813, (int)v443, (int)v440);
    GNET::DBAuctionTimeout::DBAuctionTimeout(a1, (int)GNET::__stub_DBAuctionTimeout, 814, (int)v455, (int)v453);
    GNET::DBAuctionClose::DBAuctionClose(a1, (int)GNET::__stub_DBAuctionClose, 815, (int)v447, (int)v445);
    
    GNET::DBBattleLoad::DBBattleLoad(a1, (int)GNET::__stub_DBBattleLoad, 863, (int)v364, (int)v362);
    GNET::DBBattleSet::DBBattleSet(a1, (int)GNET::__stub_DBBattleSet, 864, (int)v368, (int)v366);
    GNET::DBBattleChallenge::DBBattleChallenge(a1, (int)GNET::__stub_DBBattleChallenge, 865, (int)v356, (int)v348);
    GNET::DBBattleEnd::DBBattleEnd(a1, (int)GNET::__stub_DBBattleEnd, 868, (int)v373, (int)v370);
    GNET::DBBattleMail::DBBattleMail(a1, (int)GNET::__stub_DBBattleMail, 871, (int)v377, (int)v375);
    GNET::DBBattleBonus::DBBattleBonus(a1, (int)GNET::__stub_DBBattleBonus, 872, (int)v384, (int)v382);
    
    GNET::PutUser::PutUser(a1, (int)GNET::__stub_PutUser, 3001, (int)v154, (int)v152);
    GNET::GetUser::GetUser(a1, (int)GNET::__stub_GetUser, 3002, (int)v158, (int)v156);
    GNET::DelUser::DelUser(a1, (int)GNET::__stub_DelUser, 3003, (int)v162, (int)v160);
    
    GNET::GetRole::GetRole(a1, (int)GNET::__stub_GetRole, 3005, (int)v166, (int)v164);
    GNET::DelRole::DelRole(a1, (int)GNET::__stub_DelRole, 3006, (int)v174, (int)v172);
    
    GNET::DBCreateRole::DBCreateRole(a1, (int)GNET::__stub_DBCreateRole, 3007, (int)v136, (int)v134);
    GNET::DBDeleteRole::DBDeleteRole(a1, (int)GNET::__stub_DBDeleteRole, 3008, (int)v146, (int)v144);
    GNET::DBUndoDeleteRole::DBUndoDeleteRole(a1, (int)GNET::__stub_DBUndoDeleteRole, 3009, (int)v150, (int)v148);
    
    GNET::PutRoleBase::PutRoleBase(a1, (int)GNET::__stub_PutRoleBase, 3012, (int)v178, (int)v176);
    GNET::GetRoleBase::GetRoleBase(a1, (int)GNET::__stub_GetRoleBase, 3013, (int)v182, (int)v180);
    
    GNET::PutRoleStatus::PutRoleStatus(a1, (int)GNET::__stub_PutRoleStatus, 3014, (int)v186, (int)v184);
    GNET::GetRoleStatus::GetRoleStatus(a1, (int)GNET::__stub_GetRoleStatus, 3015, (int)v198, (int)v196);
    
    GNET::PutRoleEquipment::PutRoleEquipment(a1, (int)GNET::__stub_PutRoleEquipment, 3016, (int)v202, (int)v200);
    GNET::GetRoleEquipment::GetRoleEquipment(a1, (int)GNET::__stub_GetRoleEquipment, 3017, (int)v206, (int)v204);
    
    GNET::PutRoleTask::PutRoleTask(a1, (int)GNET::__stub_PutRoleTask, 3018, (int)v210, (int)v208);
    GNET::GetRoleTask::GetRoleTask(a1, (int)GNET::__stub_GetRoleTask, 3019, (int)v214, (int)v212);
    
    GNET::TradeInventory::TradeInventory(a1, (int)GNET::__stub_TradeInventory, 3020, (int)v218, (int)v216);
    GNET::TradeSave::TradeSave(a1, (int)GNET::__stub_TradeSave, 3021, (int)v222, (int)v220);
    
    GNET::GetMoneyInventory::GetMoneyInventory(a1, (int)GNET::__stub_GetMoneyInventory, 3022, (int)v230, (int)v228);
    GNET::PutMoneyInventory::PutMoneyInventory(a1, (int)GNET::__stub_PutMoneyInventory, 3023, (int)v234, (int)v232);
    
    GNET::PutRole::PutRole(a1, (int)GNET::__stub_PutRole, 3024, (int)v226, (int)v224);
    
    GNET::GetRoleBaseStatus::GetRoleBaseStatus(a1, (int)GNET::__stub_GetRoleBaseStatus, 3025, (int)v238, (int)v236);
    
    GNET::PutRoleStorehouse::PutRoleStorehouse(a1, (int)GNET::__stub_PutRoleStorehouse, 3026, (int)v242, (int)v240);
    GNET::GetRoleStorehouse::GetRoleStorehouse(a1, (int)GNET::__stub_GetRoleStorehouse, 3027, (int)v246, (int)v244);
    
    DelRoleAnnounce	3029
    
    GNET::PutRoleForbid::PutRoleForbid(a1, (int)GNET::__stub_PutRoleForbid, 3030, (int)v250, (int)v248);
    GNET::GetRoleForbid::GetRoleForbid(a1, (int)GNET::__stub_GetRoleForbid, 3031, (int)v254, (int)v252);
    
    GNET::GetUserRoles::GetUserRoles(a1, (int)GNET::__stub_GetUserRoles, 3032, (int)v258, (int)v256);
    GNET::GetRoleId::GetRoleId(a1, (int)GNET::__stub_GetRoleId, 3033, (int)v262, (int)v260);
    
    GNET::TransactionAcquire::TransactionAcquire(a1, (int)GNET::__stub_TransactionAcquire, 3034, (int)v388, (int)v386);
    GNET::TransactionAbort::TransactionAbort(a1, (int)GNET::__stub_TransactionAbort, 3035, (int)v392, (int)v390);
    GNET::TransactionCommit::TransactionCommit(a1, (int)GNET::__stub_TransactionCommit, 3036, (int)v396, (int)v394);
    
    GNET::ClearStorehousePasswd::ClearStorehousePasswd(a1, (int)GNET::__stub_ClearStorehousePasswd, 3043, (int)v270, (int)v268);
    GNET::RenameRole::RenameRole(a1, (int)GNET::__stub_RenameRole, 3044, (int)v274, (int)v272);
    GNET::CanChangeRolename::CanChangeRolename(a1, (int)GNET::__stub_CanChangeRolename, 3047, (int)v266, (int)v264);
    
    GNET::GetRoleInfo::GetRoleInfo(a1, (int)GNET::__stub_GetRoleInfo, 3049, (int)v170, (int)v168);
    
    GNET::PutRolePocket::PutRolePocket(a1, (int)GNET::__stub_PutRolePocket, 3050, (int)v194, (int)v192);
    GNET::GetRolePocket::GetRolePocket(a1, (int)GNET::__stub_GetRolePocket, 3051, (int)v190, (int)v188);
    
    GNET::DBSetCashPassword::DBSetCashPassword(a1, (int)GNET::__stub_DBSetCashPassword, 3100, (int)v503, (int)v501);
    
    GNET::PutSpouse::PutSpouse(a1, (int)GNET::__stub_PutSpouse, 4047, (int)v507, (int)v505);
    
    GNET::DBGetMailList::DBGetMailList(a1, (int)GNET::__stub_DBGetMailList, 4251, (int)v400, (int)v398);
    GNET::DBGetMail::DBGetMail(a1, (int)GNET::__stub_DBGetMail, 4252, (int)v404, (int)v402);
    GNET::DBGetMailAttach::DBGetMailAttach(a1, (int)GNET::__stub_DBGetMailAttach, 4253, (int)v410, (int)v406);
    GNET::DBSetMailAttr::DBSetMailAttr(a1, (int)GNET::__stub_DBSetMailAttr, 4254, (int)v415, (int)v413);
    GNET::DBSendMail::DBSendMail(a1, (int)GNET::__stub_DBSendMail, 4255, (int)v419, (int)v417);
    GNET::DBDeleteMail::DBDeleteMail(a1, (int)GNET::__stub_DBDeleteMail, 4256, (int)v429, (int)v427);
    
    GNET::AddFaction::AddFaction(a1, (int)GNET::__stub_AddFaction, 4600, (int)v302, (int)v300);
    GNET::DelFaction::DelFaction(a1, (int)GNET::__stub_DelFaction, 4601, (int)v306, (int)v304);
    GNET::AddMember::AddMember(a1, (int)GNET::__stub_AddMember, 4602, (int)v310, (int)v308);
    GNET::DelMember::DelMember(a1, (int)GNET::__stub_DelMember, 4603, (int)v314, (int)v312);
    GNET::UpdateUserFaction::UpdateUserFaction(a1, (int)GNET::__stub_UpdateUserFaction, 4604, (int)v318, (int)v316);
    GNET::UpdateFaction::UpdateFaction(a1, (int)GNET::__stub_UpdateFaction, 4605, (int)v322, (int)v320);
    GNET::GetFactionInfo::GetFactionInfo(a1, (int)GNET::__stub_GetFactionInfo, 4606, (int)v334, (int)v332);
    GNET::GetUserFaction::GetUserFaction(a1, (int)GNET::__stub_GetUserFaction, 4607, (int)v338, (int)v336);
    GNET::GetFactionDetail::GetFactionDetail(a1, (int)GNET::__stub_GetFactionDetail, 4608, (int)v342, (int)v340);
    GNET::DBVerifyMaster::DBVerifyMaster(a1, (int)GNET::__stub_DBVerifyMaster, 4609, (int)v346, (int)v344);
    GNET::DBFactionUpgrade::DBFactionUpgrade(a1, (int)GNET::__stub_DBFactionUpgrade, 4610, (int)v326, (int)v324);
    GNET::DBFactionPromote::DBFactionPromote(a1, (int)GNET::__stub_DBFactionPromote, 4611, (int)v330, (int)v328);
    Уверен, что gdelivery будет намного интереснее :lol:
    2 пользователям это нравится.
  12. gouranga Эксперт Программист Пользователи Open Source Contributor White List

    Сообщения:
    67
    Лайки:
    142
    Пол:
    Мужской
    Репутация:
    0
    Страна:
    Netherlands Netherlands
    продолжу, ы

    выкладывай их текстовыми вложениями чтоле, а то мы так страничку растянем до нельзя)
  13. gamer777 Пользователи

    Сообщения:
    18
    Лайки:
    0
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    GodlikePw
    Все наврное знают, что у Maximian'а есть Личный Кабинет с доннат шмотками которые приходят по почте, я вот не пойму:
    1) почему этот личный кабинет стоит на порте 8080?
    2) Макс говорил, что писал ЛК через сокеты, неужели все так сложно как вы говорили.
    3)и чтобы отправить что-нибудь по почте куда надо слать сокет (GameDB, Gdelivery или на сервер (порт 29000))?
    4) как оформлять запрос (использовать байтовые потоки или копать классы и хмл'ки)?
    Помогите плз.
    Очень хочется узнать принципы работы сервера.
  14. gouranga Эксперт Программист Пользователи Open Source Contributor White List

    Сообщения:
    67
    Лайки:
    142
    Пол:
    Мужской
    Репутация:
    0
    Страна:
    Netherlands Netherlands
    gamer777, ты тему-то читал вообще?
  15. gouranga Эксперт Программист Пользователи Open Source Contributor White List

    Сообщения:
    67
    Лайки:
    142
    Пол:
    Мужской
    Репутация:
    0
    Страна:
    Netherlands Netherlands
    сделал через SOAP, крутая вещь ваще.
    спасибо хаусу за вчерашнее разъяснение по кодировке текста. =)

    upd. потом еще через xml-rpc попробую. вдруг понравится больше. хотя врядли.)
  16. gouranga Эксперт Программист Пользователи Open Source Contributor White List

    Сообщения:
    67
    Лайки:
    142
    Пол:
    Мужской
    Репутация:
    0
    Страна:
    Netherlands Netherlands
    :lol: написал мини сервер для статистики, так удобнее все-таки, чем на пхп, и работает шустрее)
  17. РэПеРоК Пользователи

    Сообщения:
    46
    Лайки:
    78
    Пол:
    Мужской
    Репутация:
    0
    И ты им не поделишся!!!
    1 человеку нравится это.
  18. gouranga Эксперт Программист Пользователи Open Source Contributor White List

    Сообщения:
    67
    Лайки:
    142
    Пол:
    Мужской
    Репутация:
    0
    Страна:
    Netherlands Netherlands
    конечно нет. :lol:
  19. Gibat Команда форума Администратор Программист Пользователи

    Сообщения:
    135
    Лайки:
    163
    Пол:
    Мужской
    Репутация:
    0
    :lol:
    Chaos и Botchal писали бы сюда "прогресс" создания, интересно всетаки (:
  20. Chaos13 Проверенный II Пользователи

    Сообщения:
    10
    Лайки:
    11
    Репутация:
    0
    Разработкой ядра (общение с сервером, разбор протоколов) пока занимаюсь только я, а Ботч хз чем (мб делает фронтенд для панелек).

    Из gamedbd разобрано 100% протоколов.
    Сейчас думаю что разбирать первым - gdelivery или glinkd.
    И стоит ли юзать yii framework.

    Сейчас буду писать даемон на пхп, подключающийся к линку, и слущающий пакеты, приходящие с него.
    Даемон пока что естественно на КЛИ.

    Наверно найбольший прогресс у меня был когда я перевел с буфферизированого чтения на небуфферизированое, для этого пришлось конкретно помаятся с перевыделением памяти и чтением компактов (епт!)
Черновик сохранён Черновик удалён

Поделиться этой страницей