teamtalk最近联系会话

2024-09-01 01:36
文章标签 teamtalk 会话 最近 联系

本文主要是介绍teamtalk最近联系会话,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近联系人相关信令和协议设计

enum BuddyListCmdID {CID_BUDDY_LIST_RECENT_CONTACT_SESSION_REQUEST = 513,CID_BUDDY_LIST_RECENT_CONTACT_SESSION_RESPONSE = 514,};

流程图

请添加图片描述

  1. 根据最新的时间戳查找最新的会话
  2. 更新客户端的会话时间
/***  获取最近会话接口**  @param pPdu      收到的packet包指针*  @param conn_uuid 该包过来的socket 描述符*/void getRecentSession(CImPdu* pPdu, uint32_t conn_uuid){IM::Buddy::IMRecentContactSessionReq msg;IM::Buddy::IMRecentContactSessionRsp msgResp;if(msg.ParseFromArray(pPdu->GetBodyData(), pPdu->GetBodyLength())){CImPdu* pPduResp = new CImPdu;uint32_t nUserId = msg.user_id();uint32_t nLastTime = msg.latest_update_time();//获取最近联系人列表list<IM::BaseDefine::ContactSessionInfo> lsContactList;CSessionModel::getInstance()->getRecentSession(nUserId, nLastTime, lsContactList);msgResp.set_user_id(nUserId);for(auto it=lsContactList.begin(); it!=lsContactList.end(); ++it){IM::BaseDefine::ContactSessionInfo* pContact = msgResp.add_contact_session_list();//            *pContact = *it;pContact->set_session_id(it->session_id());pContact->set_session_type(it->session_type());pContact->set_session_status(it->session_status());pContact->set_updated_time(it->updated_time());pContact->set_latest_msg_id(it->latest_msg_id());pContact->set_latest_msg_data(it->latest_msg_data());pContact->set_latest_msg_type(it->latest_msg_type());pContact->set_latest_msg_from_user_id(it->latest_msg_from_user_id());}log("userId=%u, last_time=%u, count=%u", nUserId, nLastTime, msgResp.contact_session_list_size());msgResp.set_attach_data(msg.attach_data());pPduResp->SetPBMsg(&msgResp);pPduResp->SetSeqNum(pPdu->GetSeqNum());pPduResp->SetServiceId(IM::BaseDefine::SID_BUDDY_LIST);pPduResp->SetCommandId(IM::BaseDefine::CID_BUDDY_LIST_RECENT_CONTACT_SESSION_RESPONSE);CProxyConn::AddResponsePdu(conn_uuid, pPduResp);}else{log("parse pb failed");}}void CSessionModel::getRecentSession(uint32_t nUserId, uint32_t lastTime, list<IM::BaseDefine::ContactSessionInfo>& lsContact)
{CDBManager* pDBManager = CDBManager::getInstance();CDBConn* pDBConn = pDBManager->GetDBConn("teamtalk_slave");if (pDBConn){string strSql = "select * from IMRecentSession where userId = " + int2string(nUserId) + " and status = 0 and updated >" + int2string(lastTime) + " order by updated desc limit 100";CResultSet* pResultSet = pDBConn->ExecuteQuery(strSql.c_str());if (pResultSet){while (pResultSet->Next()){IM::BaseDefine::ContactSessionInfo cRelate;uint32_t nPeerId = pResultSet->GetInt("peerId");cRelate.set_session_id(nPeerId);cRelate.set_session_status(::IM::BaseDefine::SessionStatusType(pResultSet->GetInt("status")));IM::BaseDefine::SessionType nSessionType = IM::BaseDefine::SessionType(pResultSet->GetInt("type"));if(IM::BaseDefine::SessionType_IsValid(nSessionType)){cRelate.set_session_type(IM::BaseDefine::SessionType(nSessionType));cRelate.set_updated_time(pResultSet->GetInt("updated"));lsContact.push_back(cRelate);}else{log("invalid sessionType. userId=%u, peerId=%u, sessionType=%u", nUserId, nPeerId, nSessionType);}}delete pResultSet;}else{log("no result set for sql: %s", strSql.c_str());}pDBManager->RelDBConn(pDBConn);if(!lsContact.empty()){fillSessionMsg(nUserId, lsContact);}}else{log("no db connection for teamtalk_slave");}
}

这篇关于teamtalk最近联系会话的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125574

相关文章

poj1330(LCA最近公共祖先)

题意:求最近公共祖先 思路:之前学习了树链剖分,然后我就用树链剖分的一小部分知识就可以解这个题目了,记录每个结点的fa和depth。然后查找时,每次将depth大的结点往上走直到x = y。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstring>

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

最近心情有点复杂:论心态

一月一次的彷徨又占据了整个身心;彷徨源至不自信;而不自信则是感觉自己的价值没有很好的实现亦或者说是自己不认可自己的目前的生活和状态吧。 我始终相信一句话:任何人的生活形态完全是由自己决定的;外在的总归不能直达一个人的内心深处。所以少年 为了自己想要的生活 多坚持努力吧、不为别人只为自己心中的那一丝执着。 由此我看到了一个故事: 一个心情烦躁的人去拜访禅师。他问禅师:我这辈子就这么注定了吗?您

在二叉树中找到两个节点的最近公共祖先(基于Java)

如题  题解 public int lowestCommonAncestor(TreeNode root, int o1, int o2) {//记录遍历到的每个节点的父节点。Map<Integer, Integer> parent = new HashMap<>();Queue<TreeNode> queue = new LinkedList<>();parent.put(roo

MATLAB的fix(),floor()和ceil()函数的区别与联系

fix(x),floor(x)和ceil(x)函数都是对x取整,只不过取整方向不同而已。 这里的方向是以x轴作为横坐标来看的,向右就是朝着正轴方向,向左就是朝着负轴方向。 fix(x):向0取整(也可以理解为向中间取整) floor(x):向左取整 ceil(x):向右取整 举例: 4个数:a=3.3、b=3.7、c=-3.3、d=-3.7 fix(a)=3 fl

算法图解(8~10贪心,动态规划,K最近邻算法)

贪心算法 在每一步都选择局部最优解,从而期望最终得到全局最优解。 贪心算法并不总能保证全局最优解,因此需要满足以下两个条件: 贪心选择性质:可以通过局部最优选择构造出全局最优解。最优子结构:问题的最优解包含其子问题的最优解。 实例:给定面额的硬币,用最少硬币凑出指定金额 int minCoins(vector<int>& coins, int amount) {int count = 0

【Hive Hbase】Hbase与Hive的区别与联系

问题导读: Hive与Hbase的底层存储是什么? hive是产生的原因是什么? habase是为了弥补hadoop的什么缺陷? 共同点: 1.hbase与hive都是架构在hadoop之上的。都是用hadoop作为底层存储 区别: 2.Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目

救命!我已经彻底被最近的FLUX模型征服了

这是一期FLUX模型配套的罗拉模型推荐,这个大模型真的很香,尤其是对于人物的手部处理,推荐大家去尝试下,我已经爱上这个大模型了。 ① Flux魅影超模 https://www.liblib.art/modelinfo/15818662ba2e443d9b4f9a87c13fff55 关键词:照片上是一位优雅的年轻女子,一头棕色卷发,身穿米色上衣,戴着金耳环。她背对着相机,背景是浅色的。重点是

Flask-Session扩展,使用Redis存储会话数据

深入理解Flask-session扩展Redis Flask 应用中使用 flask-session 扩展将 session 数据存储在 Redis 中是一种高效且可扩展的方法,特别是在需要处理大量用户或需要分布式部署的应用中。以下是如何在 Flask 应用中配置 flask-session 以使用 Redis 存储 session 的步骤: 1. 安装必要的库 首先,你需要安装 Flask

解决Django会话中的竞态条件

Django 会话中的竞态条件(race condition)问题通常发生在多个请求几乎同时修改同一个会话数据时,导致数据丢失或数据不一致。这种情况在需要频繁更新会话数据的场景(如实时聊天应用、并发请求处理等)中尤为常见。 1、问题背景 在 Django 中使用会话时,可能会遇到竞态条件,导致数据丢失或不一致。竞态条件是指两个或多个请求同时访问共享资源时,由于执行顺序的不确定性,导致数据不