void CImUser::BroadcastClientMsgData(CImPdu* pPdu, uint32_t msg_id, string msg_data, CMsgConn* pFromConn, uint32_t from_id) { IM::Message::IMMsgData msg; CHECK_PB_PARSE_MSG(msg.ParseFromArray(pPdu->GetBodyData(), pPdu->GetBodyLength())); for (map<uint32_t, CMsgConn*>::iterator it = m_conn_map.begin(); it != m_conn_map.end(); it++) { CMsgConn* pConn = it->second; if (pConn != NULL && pConn != pFromConn) { if (pConn->GetCryptoFlag() == 1) { string tmp_msg_data = msg_data; if (pConn->EncryptMsgData(tmp_msg_data) == 0) { //log("BroadcastClientMsgData, from %u to %u data: %s", from_id, pConn->GetUserId(), tmp_msg_data.c_str()); //debug crypto msg.set_crypto_flag(1); msg.set_msg_data(tmp_msg_data); pPdu->SetPBMsg(&msg); } } pConn->SendPdu(pPdu); pConn->AddToSendList(msg_id, from_id); } } }
void CDBServConn::_HandleGetMsgByIdResponse(CImPdu *pPdu) { IM::Message::IMGetMsgByIdRsp msg; CHECK_PB_PARSE_MSG(msg.ParseFromArray(pPdu->GetBodyData(), pPdu->GetBodyLength())); uint32_t user_id = msg.user_id(); uint32_t session_type = msg.session_type(); uint32_t session_id = msg.session_id(); uint32_t msg_cnt = msg.msg_list_size(); CDbAttachData attach_data((uchar_t*)msg.attach_data().c_str(), msg.attach_data().length()); uint32_t handle = attach_data.GetHandle(); log("HandleGetMsgByIdResponse, userId=%u, session_type=%u, opposite_user_id=%u, cnt=%u.", user_id, session_type, session_id, msg_cnt); CMsgConn* pMsgConn = CImUserManager::GetInstance()->GetMsgConnByHandle(user_id, handle); if (pMsgConn && pMsgConn->IsOpen()) { if (pMsgConn->GetCryptoFlag() == 1) { for (int i=0; i < msg_cnt; i++) { IM::BaseDefine::MsgInfo* pMsg = msg.mutable_msg_list(i); string msg_data = (string)pMsg->msg_data(); pMsgConn->EncryptMsgData(msg_data); //log("HandleGetMsgByIdRepsone, %u->%u data: %s", user_id, session_id, msg_data.c_str()); //debug crypto pMsg->set_msg_data(msg_data); } } msg.clear_attach_data(); pPdu->SetPBMsg(&msg); pMsgConn->SendPdu(pPdu); } }
void CDBServConn::_HandleUnreadMsgCountResponse(CImPdu* pPdu) { IM::Message::IMUnreadMsgCntRsp msg; CHECK_PB_PARSE_MSG(msg.ParseFromArray(pPdu->GetBodyData(), pPdu->GetBodyLength())); uint32_t user_id = msg.user_id(); uint32_t total_cnt = msg.total_cnt(); uint32_t user_unread_cnt = msg.unreadinfo_list_size(); CDbAttachData attach_data((uchar_t*)msg.attach_data().c_str(), msg.attach_data().length()); uint32_t handle = attach_data.GetHandle(); log("HandleUnreadMsgCntResp, userId=%u, total_cnt=%u, user_unread_cnt=%u.", user_id, total_cnt, user_unread_cnt); CMsgConn* pMsgConn = CImUserManager::GetInstance()->GetMsgConnByHandle(user_id, handle); if (pMsgConn && pMsgConn->IsOpen()) { if (pMsgConn->GetCryptoFlag() == 1) { for (int i=0; i < user_unread_cnt; i++) { IM::BaseDefine::UnreadInfo* pInfo = msg.mutable_unreadinfo_list(i); string msg_data = (string)pInfo->latest_msg_data(); pMsgConn->EncryptMsgData(msg_data); //log("HandleUnreadMsgCntResp, %u data: %s", user_id, msg_data.c_str()); //debug crypto pInfo->set_latest_msg_data(msg_data); } } msg.clear_attach_data(); pPdu->SetPBMsg(&msg); pMsgConn->SendPdu(pPdu); } }
void CDBServConn::_HandleRecentSessionResponse(CImPdu *pPdu) { IM::Buddy::IMRecentContactSessionRsp msg; CHECK_PB_PARSE_MSG(msg.ParseFromArray(pPdu->GetBodyData(), pPdu->GetBodyLength())); uint32_t user_id = msg.user_id(); uint32_t session_cnt = msg.contact_session_list_size(); CDbAttachData attach_data((uchar_t*)msg.attach_data().c_str(), msg.attach_data().length()); uint32_t handle = attach_data.GetHandle(); log("HandleRecentSessionResponse, userId=%u, session_cnt=%u", user_id, session_cnt); CMsgConn* pMsgConn = CImUserManager::GetInstance()->GetMsgConnByHandle(user_id, handle); if (pMsgConn && pMsgConn->IsOpen()) { if (pMsgConn->GetCryptoFlag() == 1) { for (int i=0; i < session_cnt; i++) { IM::BaseDefine::ContactSessionInfo* pInfo = msg.mutable_contact_session_list(i); string msg_data = (string)pInfo->latest_msg_data(); pMsgConn->EncryptMsgData(msg_data); //log("HandleRecentSessionResponse, %u data: %s", user_id, msg_data.c_str()); //debug crypto pInfo->set_latest_msg_data(msg_data); } } msg.clear_attach_data(); pPdu->SetPBMsg(&msg); pMsgConn->SendPdu(pPdu); } }