void CGroupChat::HandleClientGroupCreateRequest(CImPdu* pPdu, CMsgConn* pFromConn) { IM::Group::IMGroupCreateReq msg; CHECK_PB_PARSE_MSG(msg.ParseFromArray(pPdu->GetBodyData(), pPdu->GetBodyLength())); uint32_t req_user_id = pFromConn->GetUserId(); string group_name = msg.group_name(); uint32_t group_type = msg.group_type(); if (group_type == IM::BaseDefine::GROUP_TYPE_NORMAL) { log("HandleClientGroupCreateRequest, create normal group failed, req_id=%u, group_name=%s. ", req_user_id, group_name.c_str()); return; } string group_avatar = msg.group_avatar(); uint32_t user_cnt = msg.member_id_list_size(); log("HandleClientGroupCreateRequest, req_id=%u, group_name=%s, avatar_url=%s, user_cnt=%u ", req_user_id, group_name.c_str(), group_avatar.c_str(), user_cnt); CDBServConn* pDbConn = get_db_serv_conn(); if (pDbConn) { CDbAttachData attach_data(ATTACH_TYPE_HANDLE, pFromConn->GetHandle(), 0); msg.set_user_id(req_user_id); msg.set_attach_data(attach_data.GetBuffer(), attach_data.GetLength()); pPdu->SetPBMsg(&msg); pDbConn->SendPdu(pPdu); } else { log("no DB connection "); IM::Group::IMGroupCreateRsp msg2; msg2.set_user_id(req_user_id); msg2.set_result_code(1); msg2.set_group_name(group_name); CImPdu pdu; pdu.SetPBMsg(&msg2); pdu.SetServiceId(SID_GROUP); pdu.SetCommandId(CID_GROUP_CREATE_RESPONSE); pdu.SetSeqNum(pPdu->GetSeqNum()); pFromConn->SendPdu(&pdu); } }
void CHttpQuery::_QueryCreateGroup(const string& strAppKey, Json::Value &post_json_obj, CHttpConn *pHttpConn) { HTTP::CDBServConn *pConn = HTTP::get_db_serv_conn(); if (!pConn) { log("no connection to DBProxy "); char* response_buf = PackSendResult(HTTP_ERROR_SERVER_EXCEPTION , HTTP_ERROR_MSG[9].c_str()); pHttpConn->Send(response_buf, (uint32_t)strlen(response_buf)); pHttpConn->Close(); return; } if ( post_json_obj["req_user_id"].isNull()) { log("no user id "); char* response_buf = PackSendResult(HTTP_ERROR_PARMENT, HTTP_ERROR_MSG[1].c_str()); pHttpConn->Send(response_buf, (uint32_t)strlen(response_buf)); pHttpConn->Close(); return; } if (post_json_obj["group_name"].isNull()) { log("no group name "); char* response_buf = PackSendResult(HTTP_ERROR_PARMENT, HTTP_ERROR_MSG[1].c_str()); pHttpConn->Send(response_buf, (uint32_t)strlen(response_buf)); pHttpConn->Close(); return; } if (post_json_obj["group_type"].isNull()) { log("no group type "); char* response_buf = PackSendResult(HTTP_ERROR_PARMENT, HTTP_ERROR_MSG[1].c_str()); pHttpConn->Send(response_buf, (uint32_t)strlen(response_buf)); pHttpConn->Close(); return; } if (post_json_obj["group_avatar"].isNull()) { log("no group avatar "); char* response_buf = PackSendResult(HTTP_ERROR_PARMENT, HTTP_ERROR_MSG[1].c_str()); pHttpConn->Send(response_buf, (uint32_t)strlen(response_buf)); pHttpConn->Close(); return; } if (post_json_obj["user_id_list"].isNull()) { log("no user list "); char* response_buf = PackSendResult(HTTP_ERROR_PARMENT, HTTP_ERROR_MSG[1].c_str()); pHttpConn->Send(response_buf, (uint32_t)strlen(response_buf)); pHttpConn->Close(); return; } try { uint32_t user_id = post_json_obj["req_user_id"].asUInt(); string group_name = post_json_obj["group_name"].asString(); uint32_t group_type = post_json_obj["group_type"].asUInt(); string group_avatar = post_json_obj["group_avatar"].asString(); uint32_t user_cnt = post_json_obj["user_id_list"].size(); log("QueryCreateGroup, user_id: %u, group_name: %s, group_type: %u, user_cnt: %u. ", user_id, group_name.c_str(), group_type, user_cnt); if (!IM::BaseDefine::GroupType_IsValid(group_type)) { log("QueryCreateGroup, unvalid group_type"); char* response_buf = PackSendResult(HTTP_ERROR_PARMENT, HTTP_ERROR_MSG[1].c_str()); pHttpConn->Send(response_buf, (uint32_t)strlen(response_buf)); pHttpConn->Close(); return; } CDbAttachData attach_data(ATTACH_TYPE_HANDLE, pHttpConn->GetConnHandle()); IM::Group::IMGroupCreateReq msg; msg.set_user_id(0); msg.set_group_name(group_name); msg.set_group_avatar(group_avatar); msg.set_group_type((::IM::BaseDefine::GroupType)group_type); for (uint32_t i = 0; i < user_cnt; i++) { uint32_t member_id = post_json_obj["user_id_list"][i].asUInt(); msg.add_member_id_list(member_id); } msg.set_attach_data(attach_data.GetBuffer(), attach_data.GetLength()); CImPdu pdu; pdu.SetPBMsg(&msg); pdu.SetServiceId(IM::BaseDefine::DFFX_SID_GROUP); pdu.SetCommandId(IM::BaseDefine::DFFX_CID_GROUP_CREATE_REQUEST); pConn->SendPdu(&pdu); } catch (std::runtime_error msg) { log("parse json data failed."); char* response_buf = PackSendResult(HTTP_ERROR_PARMENT, HTTP_ERROR_MSG[1].c_str()); pHttpConn->Send(response_buf, (uint32_t)strlen(response_buf)); pHttpConn->Close(); } }