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 getUnreadMsgCounter(CImPdu* pPdu, uint32_t conn_uuid) { IM::Message::IMUnreadMsgCntReq msg; IM::Message::IMUnreadMsgCntRsp msgResp; if(msg.ParseFromArray(pPdu->GetBodyData(), pPdu->GetBodyLength())) { CImPdu* pPduResp = new CImPdu; uint32_t nUserId = msg.user_id(); list<IM::BaseDefine::UnreadInfo> lsUnreadCount; uint32_t nTotalCnt = 0; CMessageModel::getInstance()->getUnreadMsgCount(nUserId, nTotalCnt, lsUnreadCount); CGroupMessageModel::getInstance()->getUnreadMsgCount(nUserId, nTotalCnt, lsUnreadCount); msgResp.set_user_id(nUserId); msgResp.set_total_cnt(nTotalCnt); for(auto it= lsUnreadCount.begin(); it!=lsUnreadCount.end(); ++it) { IM::BaseDefine::UnreadInfo* pInfo = msgResp.add_unreadinfo_list(); // *pInfo = *it; pInfo->set_session_id(it->session_id()); pInfo->set_session_type(it->session_type()); pInfo->set_unread_cnt(it->unread_cnt()); pInfo->set_latest_msg_id(it->latest_msg_id()); pInfo->set_latest_msg_data(it->latest_msg_data()); pInfo->set_latest_msg_type(it->latest_msg_type()); pInfo->set_latest_msg_from_user_id(it->latest_msg_from_user_id()); } log("userId=%d, unreadCnt=%u, totalCount=%u", nUserId, msgResp.unreadinfo_list_size(), nTotalCnt); msgResp.set_attach_data(msg.attach_data()); pPduResp->SetPBMsg(&msgResp); pPduResp->SetSeqNum(pPdu->GetSeqNum()); pPduResp->SetServiceId(IM::BaseDefine::SID_MSG); pPduResp->SetCommandId(IM::BaseDefine::CID_MSG_UNREAD_CNT_RESPONSE); CProxyConn::AddResponsePdu(conn_uuid, pPduResp); } else { log("parse pb failed"); } }
void ClientConn::_HandleUnreadCnt(CImPdu* pPdu) { IM::Message::IMUnreadMsgCntRsp msgResp; uint32_t nSeqNo = pPdu->GetSeqNum(); if(msgResp.ParseFromArray(pPdu->GetBodyData(), pPdu->GetBodyLength())) { list<IM::BaseDefine::UnreadInfo> lsUnreadInfo; uint32_t nUserId = msgResp.user_id(); uint32_t nTotalCnt = msgResp.total_cnt(); uint32_t nCnt = msgResp.unreadinfo_list_size(); for (uint32_t i=0; i<nCnt; ++i) { IM::BaseDefine::UnreadInfo unreadInfo = msgResp.unreadinfo_list(i); lsUnreadInfo.push_back(unreadInfo); } m_pCallback->onGetUnreadMsgCnt(nSeqNo, nUserId, nTotalCnt, lsUnreadInfo); } else { m_pCallback->onError(nSeqNo, pPdu->GetCommandId(), "parse pb fail"); } }
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); SpCMsgConn pMsgConn = CImUserManager::GetInstance()->GetMsgConnByHandle(user_id, handle); if (pMsgConn && pMsgConn->IsOpen()) { msg.clear_attach_data(); pPdu->SetPBMsg(&msg); pMsgConn->SendPdu(pPdu); } }