Magic_Game/samples/Samples/Demo5.h

177 lines
3.9 KiB
C
Raw Normal View History

// Copyright (C) 2019 Nomango
#pragma once
#include "common.h"
2019-03-31 13:09:31 +08:00
#include <iostream>
class Demo5
: public Scene
{
public:
static ScenePtr Create()
{
return new Demo5;
}
Demo5()
{
2019-03-31 13:56:05 +08:00
// <20><><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AddListener(Event::KeyDown, MakeClosure(this, &Demo5::OnKeyDown));
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2019-03-31 13:56:05 +08:00
TextPtr text = new Text(L"<EFBFBD><EFBFBD>G<EFBFBD><EFBFBD><EFBFBD><EFBFBD>GET<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n<EFBFBD><EFBFBD>P<EFBFBD><EFBFBD><EFBFBD><EFBFBD>POST<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n<EFBFBD><EFBFBD>U<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PUT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n<EFBFBD><EFBFBD>D<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DELETE<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
// <20><><EFBFBD>ýڵ<C3BD><DAB5><EFBFBD>СΪ<D0A1><CEAA><EFBFBD>ֲ<EFBFBD><D6B2>ִ<EFBFBD>С
text->SetSize(text->GetLayoutSize());
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
text->SetAnchor(0.5f, 0.5f);
text->SetPosition(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2);
// <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
this->AddChild(text);
}
void OnEnter() override
{
2019-03-31 13:56:05 +08:00
// <20><><EFBFBD><EFBFBD><EBB3A1>ʱ<EFBFBD>򿪿<EFBFBD><F2BFAABF><EFBFBD>̨
2019-07-30 15:27:01 +08:00
Logger::Instance()->ShowConsole(true);
}
void OnExit() override
{
2019-03-31 13:56:05 +08:00
// <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>رտ<D8B1><D5BF><EFBFBD>̨
2019-07-30 15:27:01 +08:00
Logger::Instance()->ShowConsole(false);
}
void OnKeyDown(Event const& e)
{
2019-03-31 13:56:05 +08:00
// <20><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>
if (e.key.code == KeyCode::G)
{
2019-03-31 13:56:05 +08:00
SendGetRequest();
}
else if (e.key.code == KeyCode::P)
{
SendPostRequest();
}
else if (e.key.code == KeyCode::U)
{
SendPutRequest();
}
else if (e.key.code == KeyCode::D)
{
SendDeleteRequest();
}
}
2019-03-31 13:56:05 +08:00
void SendGetRequest()
2019-03-31 13:09:31 +08:00
{
2019-03-31 13:56:05 +08:00
// <20><><EFBFBD><EFBFBD> GET <20><><EFBFBD><EFBFBD>
2019-07-30 15:27:01 +08:00
Logger::Instance()->Println(L"Start to send GET request...");
2019-03-31 13:09:31 +08:00
HttpRequestPtr request = new HttpRequest;
2019-03-31 13:56:05 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> URL
2019-03-31 13:09:31 +08:00
request->SetUrl(L"http://httpbin.org/get");
2019-03-31 13:56:05 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ GET
2019-03-31 13:09:31 +08:00
request->SetType(HttpRequest::Type::Get);
2019-03-31 13:56:05 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
request->SetResponseCallback(MakeClosure(this, &Demo5::Complete));
2019-03-31 13:56:05 +08:00
// <20><><EFBFBD><EFBFBD> HTTP <20><><EFBFBD><EFBFBD>
2019-07-30 15:27:01 +08:00
HttpClient::Instance()->Send(request);
2019-03-31 13:56:05 +08:00
}
void SendPostRequest()
{
// <20><><EFBFBD><EFBFBD> POST <20><><EFBFBD><EFBFBD>
2019-07-30 15:27:01 +08:00
Logger::Instance()->Println(L"Start to send POST request...");
2019-03-31 13:56:05 +08:00
// <20><><EFBFBD><EFBFBD> JSON <20><>ʽ<EFBFBD><CABD> POST <20><><EFBFBD><EFBFBD>
Json request_data = {
{ "string", "test<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" },
{ "boolean", true },
{ "integer", 12 },
{ "float", 3.125 },
{ "array", { 1, 2, 3, 4, 4.5 } },
{ "object", { "key", "value" } },
2019-03-31 13:56:05 +08:00
};
HttpRequestPtr request = new HttpRequest;
request->SetUrl(L"http://httpbin.org/post");
request->SetType(HttpRequest::Type::Post);
// <20><><EFBFBD><EFBFBD> POST <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
request->SetJsonData(request_data);
request->SetResponseCallback(MakeClosure(this, &Demo5::Complete));
2019-03-31 13:56:05 +08:00
2019-07-30 15:27:01 +08:00
HttpClient::Instance()->Send(request);
2019-03-31 13:56:05 +08:00
}
void SendPutRequest()
{
// <20><><EFBFBD><EFBFBD> PUT <20><><EFBFBD><EFBFBD>
2019-07-30 15:27:01 +08:00
Logger::Instance()->Println(L"Start to send PUT request...");
2019-03-31 13:56:05 +08:00
// <20><><EFBFBD><EFBFBD> JSON <20><>ʽ<EFBFBD><CABD> PUT <20><><EFBFBD><EFBFBD>
Json request_data = Json::array({ 1, 2, 3 });
2019-03-31 13:56:05 +08:00
HttpRequestPtr request = new HttpRequest;
request->SetUrl(L"http://httpbin.org/put");
request->SetType(HttpRequest::Type::Put);
// <20><><EFBFBD><EFBFBD> PUT <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
request->SetJsonData(request_data);
request->SetResponseCallback(MakeClosure(this, &Demo5::Complete));
2019-03-31 13:56:05 +08:00
2019-07-30 15:27:01 +08:00
HttpClient::Instance()->Send(request);
2019-03-31 13:56:05 +08:00
}
void SendDeleteRequest()
{
// <20><><EFBFBD><EFBFBD> DELETE <20><><EFBFBD><EFBFBD>
2019-07-30 15:27:01 +08:00
Logger::Instance()->Println(L"Start to send DELETE request...");
2019-03-31 13:56:05 +08:00
HttpRequestPtr request = new HttpRequest;
request->SetUrl(L"http://httpbin.org/delete");
request->SetType(HttpRequest::Type::Delete);
request->SetResponseCallback(MakeClosure(this, &Demo5::Complete));
2019-03-31 13:09:31 +08:00
2019-07-30 15:27:01 +08:00
HttpClient::Instance()->Send(request);
2019-03-31 13:09:31 +08:00
}
void Complete(HttpRequestPtr request, HttpResponsePtr response)
{
2019-03-31 13:56:05 +08:00
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
if (response->IsSucceed())
{
2019-03-31 13:56:05 +08:00
try
{
// <20><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD> JSON <20><>ʽ
Json response_data = Json::parse(response->GetData());
Json result = {
{L"HttpCode", response->GetResponseCode()},
{L"Data", response_data},
};
std::wcout << L"Response: " << std::endl << result.dump(4) << std::endl;
}
catch (json_exception& e)
{
std::wcout << L"Parse JSON failed: " << e.what() << std::endl;
2019-03-31 13:56:05 +08:00
}
}
else
{
2019-03-31 13:56:05 +08:00
// <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>ʱ<EFBFBD><CAB1>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
OutputError(response);
}
}
void OutputError(HttpResponsePtr response)
{
// <20><>ӡ HTTP <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD>Ϣ
Json result = {
2019-03-31 13:09:31 +08:00
{L"HttpCode", response->GetResponseCode()},
{L"Error", response->GetError()},
2019-03-31 13:56:05 +08:00
};
std::wcout << L"Response: " << std::endl << result.dump(4) << std::endl;
}
};