GitHub Viewer
/*
* HttpQuery.cpp
*
* Created on: 2013-10-22
* Author: ziteng@mogujie.com
*/
#include "HttpQuery.h"
#include "RouteServConn.h"
#include "DBServConn.h"
#include "LoginServConn.h"
#include "ImUser.h"
#include "GroupChat.h"
static uint32_t g_total_query = 0;
static uint32_t g_last_year = 0;
static uint32_t g_last_month = 0;
static uint32_t g_last_mday = 0;
#define HTTP_QUEYR_HEADER "HTTP/1.1 200 OK\r\n"\
"Cache-Control:no-cache\r\n"\
"Connection:close\r\n"\
"Content-Length:%d\r\n"\
"Content-Type:text/html;charset=utf-8\r\n\r\n%s"
CHttpQuery* CHttpQuery::m_query_instance = NULL;
string PackSendOk()
{
jsonxx::Object json_obj;
json_obj Close();
return;
}
// process post request with post content
if (strcmp(url.c_str(), "/query/createNormalGroup") == 0) {
_QueryCreateNormalGroup(json_obj, pHttpConn);
}
else if (strcmp(url.c_str(), "/query/changeMembers") == 0) {
_QueryChangeMember(json_obj, pHttpConn);
}
else {
log("url not support\n");
pHttpConn->Close();
return;
}
}
void CHttpQuery::_QueryCreateNormalGroup(jsonxx::Object &post_json_obj, CHttpConn *pHttpConn)
{
CRouteServConn *pConn = get_route_serv_conn();
if (!pConn) {
log("no connection to RouteServConn\n");
pHttpConn->Close();
return;
}
if ( !post_json_obj.has("group_id") ) {
log("no group id\n");
pHttpConn->Close();
return;
}
if (!post_json_obj.has("group_name")) {
log("no group name\n");
pHttpConn->Close();
return;
}
if (!post_json_obj.has("group_avatar")) {
log("no group avatar\n");
pHttpConn->Close();
return;
}
if (!post_json_obj.has("user_list")) {
log("no user list\n");
pHttpConn->Close();
return;
}
string response = PackSendOk();
pHttpConn->Send((void*)response.c_str(), response.length());
pHttpConn->Close();
uint32_t group_id = post_json_obj.get("group_id");
string group_name = post_json_obj.get("group_name");
string group_avatar = post_json_obj.get("group_avatar");
group_name = URLDecode(group_name);
jsonxx::Array user_array = post_json_obj.get("user_list");
uint32_t user_cnt = user_array.size();
log("QueryCreateNormalGroup, group_id: %u, group_name: %s, user_cnt: %u.\n", group_id,
group_name.c_str(), user_cnt);
uint32_t* user_list = NULL;
if (user_cnt > 0) {
user_list = new uint32_t[user_cnt];
if (NULL == user_list) {
log("_QueryCreateNormalGroup, alloced failed");
return;
}
for (uint32_t i = 0; i < user_array.size(); i++) {
user_list[i] = user_array.get(i);
}
}
CGroupChat::GetInstance()->HandleGroupCreateNormalGroupNotify(group_id, group_name.c_str(),
group_avatar.c_str(), user_cnt, user_list);
CImPduGroupCreateNormalGroupNotify pdu(group_id, group_name.c_str(), group_avatar.c_str(),
user_cnt, user_list);
pConn->SendPdu(&pdu);
}
void CHttpQuery::_QueryChangeMember(jsonxx::Object &post_json_obj, CHttpConn *pHttpConn)
{
CRouteServConn *pConn = get_route_serv_conn();
if (!pConn) {
log("no connection to RouteServConn\n");
pHttpConn->Close();
return;
}
if ( !post_json_obj.has("group_id") ) {
log("no group id\n");
pHttpConn->Close();
return;
}
if (!post_json_obj.has("user_list")) {
log("no user list\n");
pHttpConn->Close();
return;
}
string response = PackSendOk();
pHttpConn->Send((void*)response.c_str(), response.length());
pHttpConn->Close();
uint32_t group_id = post_json_obj.get("group_id");
jsonxx::Array user_array = post_json_obj.get("user_list");
uint32_t user_cnt = user_array.size();
log("QueryChangeMember, group_id: %u, user_cnt: %u.\n", group_id,
user_cnt);
uint32_t* user_list = NULL;
if (user_cnt > 0) {
user_list = new uint32_t[user_cnt];
if (NULL == user_list) {
log("_QueryCreateNormalGroup, alloced failed");
return;
}
for (uint32_t i = 0; i < user_array.size(); i++) {
user_list[i] = user_array.get(i);
}
}
CGroupChat::GetInstance()->HandleGroupChangeMemberNotify(group_id, user_cnt,
user_list);
CImPduGroupChangeMemberNotify pdu( group_id, user_cnt, user_list);
pConn->SendPdu(&pdu);
}