update network sample
This commit is contained in:
		
							parent
							
								
									e2b5953a75
								
							
						
					
					
						commit
						0b7ca8670f
					
				|  | @ -901,7 +901,7 @@ namespace easy2d | |||
| 				case JsonType::String: | ||||
| 				{ | ||||
| 					out->write('\"'); | ||||
| 					out->write(json.value_.data.string->c_str()); | ||||
| 					dump_string(*json.value_.data.string); | ||||
| 					out->write('\"'); | ||||
| 					return; | ||||
| 				} | ||||
|  | @ -986,6 +986,31 @@ namespace easy2d | |||
| 				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: | ||||
| 			output_adapter<char_type>* out; | ||||
| 			char_type indent_char; | ||||
|  | @ -1247,10 +1272,20 @@ namespace easy2d | |||
| 				{ | ||||
| 					string_buffer.clear(); | ||||
| 
 | ||||
| 					bool must_read_next = false; | ||||
| 					while (true) | ||||
| 					{ | ||||
| 						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 \"
 | ||||
| 							read_next(); | ||||
|  |  | |||
|  | @ -554,7 +554,7 @@ namespace easy2d | |||
| 	{ | ||||
| 		discard_const_data(); | ||||
| 
 | ||||
| 		if (cstr) | ||||
| 		if (cstr && count) | ||||
| 		{ | ||||
| 			if (count > capacity_) | ||||
| 			{ | ||||
|  |  | |||
|  | @ -15,10 +15,11 @@ public: | |||
| 
 | ||||
| 	Demo5() | ||||
| 	{ | ||||
| 		// 添加按键监听
 | ||||
| 		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()); | ||||
| 		// 设置文字位置
 | ||||
|  | @ -31,30 +32,107 @@ public: | |||
| 
 | ||||
| 	void OnEnter() override | ||||
| 	{ | ||||
| 		// 进入场景时打开控制台
 | ||||
| 		Application::ShowConsole(true); | ||||
| 		SendRequest(); | ||||
| 	} | ||||
| 
 | ||||
| 	void OnExit() override | ||||
| 	{ | ||||
| 		// 退出场景时关闭控制台
 | ||||
| 		Application::ShowConsole(false); | ||||
| 	} | ||||
| 
 | ||||
| 	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; | ||||
| 		// 设置请求 URL
 | ||||
| 		request->SetUrl(L"http://httpbin.org/get"); | ||||
| 		// 设置请求类型为 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)); | ||||
| 
 | ||||
| 		HttpClient::Instance().Send(request); | ||||
|  | @ -62,22 +140,39 @@ public: | |||
| 
 | ||||
| 	void Complete(HttpRequestPtr request, HttpResponsePtr response) | ||||
| 	{ | ||||
| 		// 判断请求是否成功
 | ||||
| 		if (response->IsSucceed()) | ||||
| 		{ | ||||
| 			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; | ||||
| 			try | ||||
| 			{ | ||||
| 				// 将获取到的数据解析成 JSON 格式
 | ||||
| 				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) | ||||
| 			{ | ||||
| 				E2D_ERROR_LOG(L"Parse JSON failed: %s", e.what()); | ||||
| 			} | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			Json result = { | ||||
| 				{L"HttpCode", response->GetResponseCode()}, | ||||
| 				{L"Error", response->GetError()}, | ||||
| 			}; | ||||
| 			std::wcout << L"Response: " << std::endl << result.dump(4) << std::endl; | ||||
| 			// 请求失败时打印错误信息
 | ||||
| 			OutputError(response); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	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