http_ru - oxygine/oxygine-framework GitHub Wiki
HttpRequest
в Oxygine есть базовая поддержка GET и POST HTTP запросов.
Перед выполнением HTTP запросов необходимо инициализировать подсистему:
HttpRequestTask::init();
А при выходе освободить:
HttpRequestTask::release();
Запрос создается с помощью метода:
spHttpRequestTask request = HttpRequestTask::create();
Класс HttpRequestTask является наследником класса EventDispatcher и поддерживает 3 типа событий:
- ERROR - срабатывает при ошибке выполнения запроса
- PROGRESS - вызывается каждый раз, при получении новой порции данных с сервера
- COMPLETE - срабатывает при успешном завершении запроса
все события вызываются в основном игровом потоке
Пример выполнения запроса:
#include "HttpRequestTask.h"
void TestHttp::someFunc()
{
spHttpRequestTask task = HttpRequestTask::create();
task->setUrl("http://nist.time.gov/actualtime.cgi");
task->addEventListener(HttpRequestTask::COMPLETE, CLOSURE(this, &TestHttp::dateTimeLoaded));
task->run();
}
void TestHttp::dateTimeLoaded(Event*)
{
HttpRequestTask* task = safeCast<HttpRequestTask*>(event->currentTarget.get());
const std::vector<unsigned char> &response = task->getResponse();
//convert it to string and print
string resp;
resp.assign(response.begin(), response.end());
logs::messageln("server response: %s", resp.c_str());
}
По умолчанию, запрос имеет тип GET, если вы хотите сделать POST запрос, то необходимо вызвать метод setPostData, передав в него тело своего POST запроса:
request->setPostData(mydata);
Скачивание файлов
HttpRequestTask умеет загружать данные напрямую в файл, для этого надо вызвать метод setFileName.
в таком случае getResponse будет возвращать пустой буфер
Если файл с таким же именем уже существует, то он будет удален при запуске запроса. Если вы указываете файл, вложенный в папку, то данную папку необходимо создать самостоятельно.
Пример:
spHttpRequestTask task = HttpRequestTask::create();
task->setUrl("http://oxygine.org/emscripten/MPHello.js.gz");
task->setFileName("somefile.abc");
task->run();
По завершению запроса в корне появится файл с именем somefile.abc
Загрузка изображений
Класс WebImage унаследован от Sprite и умеет напрямую загружать в себя картинки доступные по HTTP. Загрузка выполняется асинхронно.
#include "WebImage.h"
void TestHttp::someFunc()
{
spWebImage image = new WebImage;
image->load("http://oxygine.org/img/madewith.png");
image->setPosition(300, 300);
image->attachTo(getStage());
}