1. 简介
该模块用于用户信息管理
2. 类与接口
CUserModel
void CUserModel::**getChangedId**(uint32_t& nLastTime, list\<uint32_t\> &lsIds)
从mysql IMUser获取updated >= nLastTime用户的id
void CUserModel::**getUsers**(list<uint32_t> lsIds, list\<IM::BaseDefine::UserInfo\> &lsUsers)
从mysql IMUser获取id在lsIds的所有用户详情,并存到lsUsers中
bool CUserModel::**getUser**(uint32_t nUserId, DBUserInfo_t &cUser)
从mysql IMUser获取指定nUserId的用户详情,并存到cUser中
bool CUserModel::**updateUser**(DBUserInfo_t &cUser)
更新mysql IMUser中cUser的用户信息
bool CUserModel::**insertUser**(DBUserInfo_t &cUser)
向mysql IMUser插入cUser信息
void CUserModel::**clearUserCounter**(uint32_t nUserId, uint32_t nPeerId, IM::BaseDefine::SessionType nSessionType)
切换到unread数据库,
若为私聊信息,则删除哈希表中key为unread_nUserId field为nPeerId的字段;
若为群消息,则获取哈希表中key为nPeerId_im_group_msg的所有字段并将其拷贝一份,其key为nUserId_nPeerId_im_user_group
void CUserModel::**setCallReport**(uint32_t nUserId, uint32_t nPeerId, IM::BaseDefine::ClientType nClientType)
将nUserId和nPeerId对话的平台类型(Windos Mac IOS或ANDROID )插入到mysql IMCallLog中
bool CUserModel::**updateUserSignInfo**(uint32_t user_id, const string& sign_info)
更新mysql IMUser user_id的签名信息
bool CUserModel::**getUserSingInfo**(uint32_t user_id, string* sign_info)
获取mysql IMUser user_id的签名信息
bool CUserModel::**updatePushShield**(uint32_t user_id, uint32_t shield_status)
更新mysql IMUser user_id的勿扰状态为shield_status(0关闭勿扰 1开启勿扰)
bool CUserModel::**getPushShield**(uint32_t user_id, uint32_t* shield_status)
获取mysql IMUser user_id的勿扰状态
UserAction
void **getUserInfo**(CImPdu* pPdu, uint32_t conn_uuid)
处理用户详情请求消息;
先解析pdu,再调用CUserModel::getUsers获取id在user_id_list的用户详情,然后封装成响应pdu扔到响应loop中等待发送
void **getChangedUser**(CImPdu* pPdu, uint32_t conn_uuid)
处理更新的用户详情请求消息;
获取IMUser update >= latest_update_time的用户详情
void **doPushShield**(CImPdu* pPdu, uint32_t conn_uuid)
处理更新用户勿扰状态请求消息
void **doQueryPushShield**(CImPdu* pPdu, uint32_t conn_uuid)
处理查询用户勿扰状态请求消息
3. test_usermodel.cpp说明
test_getChangedUser用例构造了个getChangedUser请求消息,用于请求更新的用户详情;
test_clearUnreadMsgCounter构造了个类型为单个用户会话的clearUserCounter请求消息,用于请求清除未读消息计数;
该用例由于mysql和redis连接池未释放存在内存泄漏问题,解决方法参考test_dbpool.cpp
4. 源码
链接:TeamTalk_BlueBling
测试demo:tests/test_usermodel.cpp