以前の C++/CX 小ネタ に続く C++/CX の話題です。
HTTPサーバーに JSON データを送って、何か JSON データが返ってくるまでを記述した例になります。
コード例
auto url = ref new Uri("https://hoge.localhost.net/api/foo/");
auto http_client = ref new Windows::Web::Http::HttpClient();
auto content = ref new Windows::Web::Http::HttpStringContent(
ref new String(json.c_str()),
Windows::Storage::Streams::UnicodeEncoding::Utf8,
"application/json"
);
auto response = create_task(
[&]() { auto task = create_task(http_client->PostAsync(url, content)); task.wait(); return task.get(); }
).then(
[&](task args) {
auto task = create_task(args.get()->Content->ReadAsStringAsync()); task.wait(); return task.get();
}
);
response.wait();
auto body = response.get();
body->Data(); // Response JSON
通信なので非同期処理で記述しています。
create_task 関数は処理の継続を、 then で続けて記述できるので便利でした。
このコード例では、 json の文字列が UTF-8 エンコードされたものとして送っています。
あとは、JSON データをどう作るか、デコードするかですが、これには json を扱うライブラリは多種あるのでそれらにお任せです。
手元では picojson を入れてみましたが、 C++/CX の環境でも問題なく動作しているようです。