Ta lấy ví dụ trong game Smart Memory, ở màn hình HighScore, game sẽ kết nối máy chủ để lấy về danh sách 20 người chơi có điểm cao nhất.
Giả sử server API để nhận về danh sách high score là
http://myserver.com/highscoresChúng ta sẽ sử dụng đối tượng của lớp HttpRequest để thực hiện gửi request đến server
HttpRequest* request = new HttpRequest();Nếu request yêu cầu thiết lập các tham số header (thường là vì mục đích bảo mật), chúng ta sẽ sử dụng hàm request->setHeaders().
std::string url = "http://myserver.com/highscores";
request->setUrl(url.c_str());
std::vector<std::string> headers;
headers.push_back("header-param1:value1");
headers.push_back("header-param2:value2");
request->setHeaders(headers);
request->setRequestType(HttpRequest::Type::GET);
request->setResponseCallback(CC_CALLBACK_2(HighScoreScene::httpResponse, this));
request->setTag("GetRanking");
HttpClient::getInstance()->send(request);
request->release();
std::vector<std::string> headers;Vì đây là request dạng GET nên ta gọi request->setRequestType(HttpRequest::Type::GET)
headers.push_back("header-param1:value1");
headers.push_back("header-param2:value2");
request->setHeaders(headers);
Thiết lập hàm callback khi request nhận được dữ liệu phản hồi từ server
request->setResponseCallback(CC_CALLBACK_2(HighScoreScene::httpResponse, this));Cuối cùng, ta sẽ send request
HttpClient::getInstance()->send(request);Tiếp đến chúng ta sẽ xét hàm callback httpResponse và tìm hiểu phần parse JSON
Giả sử định dạng chuỗi dữ liệu JSON trả về của High score như sau:
[Hàm httpResponse sẽ phân tích để lấy các giá trị name, score, position, id của từng người chơi
{
"player_id": "43",
"player_name": "halo",
"score": "234",
"position": 1
},
{
"player_id": "69",
"player_name": "ari",
"score": "132",
"position": 2
},
{
"player_id": "83",
"player_name": "kath",
"score": "87",
"position": 3
}
]
void HighScoreScene::httpResponse(HttpClient* client, HttpResponse* response)Phải kiểm tra mã lỗi trước khi phân tích dữ liệu qua hàm
{
if (response->getResponseCode() == 200) {
rapidjson::Document document1;
document1.Parse<0>(json.c_str());
if (document1.IsArray()) {
rapidjson::SizeType size = document1.Size();
for (rapidjson::SizeType i = 0; i < size; i++) {
std::string name = document1[i]["player_name"].GetString();
std::string score = document1[i]["score"].GetString();
std::string pos = std::to_string(document1[i]["position"].GetInt());
std::string id = document1[i]["player_id"].GetString();
}
}
} else {
//Error
}
}
response->getResponseCode()Parse dữ liệu vào đối tượng rapidjson::Document
rapidjson::Document document1;
document1.Parse<0>(json.c_str());
No comments:
Post a Comment