update network sample
This commit is contained in:
parent
e2b5953a75
commit
0b7ca8670f
|
|
@ -901,7 +901,7 @@ namespace easy2d
|
||||||
case JsonType::String:
|
case JsonType::String:
|
||||||
{
|
{
|
||||||
out->write('\"');
|
out->write('\"');
|
||||||
out->write(json.value_.data.string->c_str());
|
dump_string(*json.value_.data.string);
|
||||||
out->write('\"');
|
out->write('\"');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -986,6 +986,31 @@ namespace easy2d
|
||||||
out->write(number_buffer.data());
|
out->write(number_buffer.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dump_string(const string_type & val)
|
||||||
|
{
|
||||||
|
for (const auto& ch : val)
|
||||||
|
{
|
||||||
|
switch (ch)
|
||||||
|
{
|
||||||
|
case '\t':
|
||||||
|
out->write('\\');
|
||||||
|
out->write('t');
|
||||||
|
break;
|
||||||
|
case '\r':
|
||||||
|
out->write('\\');
|
||||||
|
out->write('r');
|
||||||
|
break;
|
||||||
|
case '\n':
|
||||||
|
out->write('\\');
|
||||||
|
out->write('n');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
out->write(ch);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
output_adapter<char_type>* out;
|
output_adapter<char_type>* out;
|
||||||
char_type indent_char;
|
char_type indent_char;
|
||||||
|
|
@ -1247,10 +1272,20 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
string_buffer.clear();
|
string_buffer.clear();
|
||||||
|
|
||||||
|
bool must_read_next = false;
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
const auto ch = read_next();
|
const auto ch = read_next();
|
||||||
if (ch == '\"')
|
|
||||||
|
if (must_read_next)
|
||||||
|
{
|
||||||
|
must_read_next = false;
|
||||||
|
}
|
||||||
|
else if (ch == '\\')
|
||||||
|
{
|
||||||
|
must_read_next = true;
|
||||||
|
}
|
||||||
|
else if (ch == '\"')
|
||||||
{
|
{
|
||||||
// skip last \"
|
// skip last \"
|
||||||
read_next();
|
read_next();
|
||||||
|
|
|
||||||
|
|
@ -554,7 +554,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
discard_const_data();
|
discard_const_data();
|
||||||
|
|
||||||
if (cstr)
|
if (cstr && count)
|
||||||
{
|
{
|
||||||
if (count > capacity_)
|
if (count > capacity_)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,11 @@ public:
|
||||||
|
|
||||||
Demo5()
|
Demo5()
|
||||||
{
|
{
|
||||||
|
// 添加按键监听
|
||||||
AddListener(Event::KeyDown, Closure(this, &Demo5::OnKeyDown));
|
AddListener(Event::KeyDown, Closure(this, &Demo5::OnKeyDown));
|
||||||
|
|
||||||
// 创建说明文字
|
// 创建说明文字
|
||||||
TextPtr text = new Text(L"°´¿Õ¸ñ¼ü·¢ËͲâÊÔÇëÇó");
|
TextPtr text = new Text(L"按G发送GET请求\n按P发送POST请求\n按U发送PUT请求\n按D发送DELETE请求");
|
||||||
// 设置节点大小为文字布局大小
|
// 设置节点大小为文字布局大小
|
||||||
text->SetSize(text->GetLayoutSize());
|
text->SetSize(text->GetLayoutSize());
|
||||||
// 设置文字位置
|
// 设置文字位置
|
||||||
|
|
@ -31,30 +32,107 @@ public:
|
||||||
|
|
||||||
void OnEnter() override
|
void OnEnter() override
|
||||||
{
|
{
|
||||||
|
// 进入场景时打开控制台
|
||||||
Application::ShowConsole(true);
|
Application::ShowConsole(true);
|
||||||
SendRequest();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnExit() override
|
void OnExit() override
|
||||||
{
|
{
|
||||||
|
// 退出场景时关闭控制台
|
||||||
Application::ShowConsole(false);
|
Application::ShowConsole(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnKeyDown(Event const& e)
|
void OnKeyDown(Event const& e)
|
||||||
{
|
{
|
||||||
if (e.key.code == KeyCode::Space)
|
// 按不同键发送不同请求
|
||||||
|
if (e.key.code == KeyCode::G)
|
||||||
{
|
{
|
||||||
SendRequest();
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SendRequest()
|
void SendGetRequest()
|
||||||
{
|
{
|
||||||
Logger::Instance().Println(L"Start to send request...");
|
// 发送 GET 请求
|
||||||
|
Logger::Instance().Println(L"Start to send GET request...");
|
||||||
|
|
||||||
HttpRequestPtr request = new HttpRequest;
|
HttpRequestPtr request = new HttpRequest;
|
||||||
|
// 设置请求 URL
|
||||||
request->SetUrl(L"http://httpbin.org/get");
|
request->SetUrl(L"http://httpbin.org/get");
|
||||||
|
// 设置请求类型为 GET
|
||||||
request->SetType(HttpRequest::Type::Get);
|
request->SetType(HttpRequest::Type::Get);
|
||||||
|
// 设置请求完成后的回调函数
|
||||||
|
request->SetResponseCallback(Closure(this, &Demo5::Complete));
|
||||||
|
|
||||||
|
// 发送 HTTP 请求
|
||||||
|
HttpClient::Instance().Send(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SendPostRequest()
|
||||||
|
{
|
||||||
|
// 发送 POST 请求
|
||||||
|
Logger::Instance().Println(L"Start to send POST request...");
|
||||||
|
|
||||||
|
// 创建 JSON 格式的 POST 数据
|
||||||
|
Json request_data = {
|
||||||
|
{"String", "StringTest"},
|
||||||
|
{"Boolean", true},
|
||||||
|
{"Integer", 12},
|
||||||
|
{"Float", 3.125},
|
||||||
|
{"Array", {1, 2, 3, 4, 4.5 }},
|
||||||
|
{"Object", {"Key", "Value"}},
|
||||||
|
};
|
||||||
|
|
||||||
|
HttpRequestPtr request = new HttpRequest;
|
||||||
|
request->SetUrl(L"http://httpbin.org/post");
|
||||||
|
request->SetType(HttpRequest::Type::Post);
|
||||||
|
// 设置 POST 请求的数据
|
||||||
|
request->SetData(request_data.dump());
|
||||||
|
request->SetResponseCallback(Closure(this, &Demo5::Complete));
|
||||||
|
|
||||||
|
HttpClient::Instance().Send(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SendPutRequest()
|
||||||
|
{
|
||||||
|
// 发送 PUT 请求
|
||||||
|
Logger::Instance().Println(L"Start to send PUT request...");
|
||||||
|
|
||||||
|
// 创建 JSON 格式的 PUT 数据
|
||||||
|
Json request_data = {
|
||||||
|
{"user", {{"id", 1}, {"phone", "12345678"}}},
|
||||||
|
};
|
||||||
|
|
||||||
|
HttpRequestPtr request = new HttpRequest;
|
||||||
|
request->SetUrl(L"http://httpbin.org/put");
|
||||||
|
request->SetType(HttpRequest::Type::Put);
|
||||||
|
// 设置 PUT 请求的数据
|
||||||
|
request->SetData(request_data.dump());
|
||||||
|
request->SetResponseCallback(Closure(this, &Demo5::Complete));
|
||||||
|
|
||||||
|
HttpClient::Instance().Send(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SendDeleteRequest()
|
||||||
|
{
|
||||||
|
// 发送 DELETE 请求
|
||||||
|
Logger::Instance().Println(L"Start to send DELETE request...");
|
||||||
|
|
||||||
|
HttpRequestPtr request = new HttpRequest;
|
||||||
|
request->SetUrl(L"http://httpbin.org/delete");
|
||||||
|
request->SetType(HttpRequest::Type::Delete);
|
||||||
request->SetResponseCallback(Closure(this, &Demo5::Complete));
|
request->SetResponseCallback(Closure(this, &Demo5::Complete));
|
||||||
|
|
||||||
HttpClient::Instance().Send(request);
|
HttpClient::Instance().Send(request);
|
||||||
|
|
@ -62,22 +140,39 @@ public:
|
||||||
|
|
||||||
void Complete(HttpRequestPtr request, HttpResponsePtr response)
|
void Complete(HttpRequestPtr request, HttpResponsePtr response)
|
||||||
{
|
{
|
||||||
|
// 判断请求是否成功
|
||||||
if (response->IsSucceed())
|
if (response->IsSucceed())
|
||||||
{
|
{
|
||||||
Json response_data = Json::parse(response->GetData());
|
try
|
||||||
Json result = {
|
{
|
||||||
{L"HttpCode", response->GetResponseCode()},
|
// 将获取到的数据解析成 JSON 格式
|
||||||
{L"Data", response_data},
|
Json response_data = Json::parse(response->GetData());
|
||||||
};
|
Json result = {
|
||||||
std::wcout << L"Response: " << std::endl << result.dump(4) << std::endl;
|
{L"HttpCode", response->GetResponseCode()},
|
||||||
|
{L"Data", response_data},
|
||||||
|
};
|
||||||
|
|
||||||
|
std::wcout << L"Response: " << std::endl << result.dump(4) << std::endl;
|
||||||
|
}
|
||||||
|
catch (json_exception& e)
|
||||||
|
{
|
||||||
|
E2D_ERROR_LOG(L"Parse JSON failed: %s", e.what());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Json result = {
|
// 请求失败时打印错误信息
|
||||||
{L"HttpCode", response->GetResponseCode()},
|
OutputError(response);
|
||||||
{L"Error", response->GetError()},
|
|
||||||
};
|
|
||||||
std::wcout << L"Response: " << std::endl << result.dump(4) << std::endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OutputError(HttpResponsePtr response)
|
||||||
|
{
|
||||||
|
// 打印 HTTP 响应结果的状态码和错误信息
|
||||||
|
Json result = {
|
||||||
|
{L"HttpCode", response->GetResponseCode()},
|
||||||
|
{L"Error", response->GetError()},
|
||||||
|
};
|
||||||
|
std::wcout << L"Response: " << std::endl << result.dump(4) << std::endl;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue