| 
									
										
										
										
											2019-03-31 01:37:06 +08:00
										 |  |  |  | // Copyright (C) 2019 Nomango
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | #pragma once
 | 
					
						
							|  |  |  |  | #include "common.h"
 | 
					
						
							| 
									
										
										
										
											2019-03-31 13:09:31 +08:00
										 |  |  |  | #include <iostream>
 | 
					
						
							| 
									
										
										
										
											2019-03-31 01:37:06 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 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>
 | 
					
						
							| 
									
										
										
										
											2019-04-08 14:15:27 +08:00
										 |  |  |  | 		AddListener(Event::KeyDown, MakeClosure(this, &Demo5::OnKeyDown)); | 
					
						
							| 
									
										
										
										
											2019-03-31 01:37:06 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <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>"); | 
					
						
							| 
									
										
										
										
											2019-03-31 01:37:06 +08:00
										 |  |  |  | 		// <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-03-31 01:37:06 +08:00
										 |  |  |  | 		Application::ShowConsole(true); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	void OnExit() override | 
					
						
							|  |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2019-03-31 13:56:05 +08:00
										 |  |  |  | 		// <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>رտ<D8B1><D5BF><EFBFBD>̨
 | 
					
						
							| 
									
										
										
										
											2019-03-31 01:37:06 +08:00
										 |  |  |  | 		Application::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 01:37:06 +08:00
										 |  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											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 01:37:06 +08:00
										 |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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>
 | 
					
						
							|  |  |  |  | 		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>
 | 
					
						
							| 
									
										
										
										
											2019-04-08 14:15:27 +08:00
										 |  |  |  | 		request->SetResponseCallback(MakeClosure(this, &Demo5::Complete)); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:56:05 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD> HTTP <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		HttpClient::Instance().Send(request); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	void SendPostRequest() | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD> POST <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		Logger::Instance().Println(L"Start to send POST request..."); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD> JSON <20><>ʽ<EFBFBD><CABD> POST <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		Json request_data = { | 
					
						
							| 
									
										
										
										
											2019-04-01 22:02:46 +08:00
										 |  |  |  | 			{ "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>
 | 
					
						
							| 
									
										
										
										
											2019-03-31 23:09:49 +08:00
										 |  |  |  | 		request->SetJsonData(request_data); | 
					
						
							| 
									
										
										
										
											2019-04-08 14:15:27 +08:00
										 |  |  |  | 		request->SetResponseCallback(MakeClosure(this, &Demo5::Complete)); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:56:05 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 		HttpClient::Instance().Send(request); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	void SendPutRequest() | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD> PUT <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		Logger::Instance().Println(L"Start to send PUT request..."); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD> JSON <20><>ʽ<EFBFBD><CABD> PUT <20><><EFBFBD><EFBFBD>
 | 
					
						
							| 
									
										
										
										
											2019-04-01 22:02:46 +08:00
										 |  |  |  | 		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>
 | 
					
						
							| 
									
										
										
										
											2019-03-31 23:09:49 +08:00
										 |  |  |  | 		request->SetJsonData(request_data); | 
					
						
							| 
									
										
										
										
											2019-04-08 14:15:27 +08:00
										 |  |  |  | 		request->SetResponseCallback(MakeClosure(this, &Demo5::Complete)); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:56:05 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 		HttpClient::Instance().Send(request); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	void SendDeleteRequest() | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20><><EFBFBD><EFBFBD> DELETE <20><><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		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); | 
					
						
							| 
									
										
										
										
											2019-04-08 14:15:27 +08:00
										 |  |  |  | 		request->SetResponseCallback(MakeClosure(this, &Demo5::Complete)); | 
					
						
							| 
									
										
										
										
											2019-03-31 13:09:31 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 		HttpClient::Instance().Send(request); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-31 01:37:06 +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>
 | 
					
						
							| 
									
										
										
										
											2019-03-31 01:37:06 +08:00
										 |  |  |  | 		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) | 
					
						
							|  |  |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2019-03-31 23:09:49 +08:00
										 |  |  |  | 				std::wcout << L"Parse JSON failed: " << e.what() << std::endl; | 
					
						
							| 
									
										
										
										
											2019-03-31 13:56:05 +08:00
										 |  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2019-03-31 01:37:06 +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; | 
					
						
							| 
									
										
										
										
											2019-03-31 01:37:06 +08:00
										 |  |  |  | 	} | 
					
						
							|  |  |  |  | }; |