TeamTalk路由服务器

2024-09-01 02:28
文章标签 服务器 路由 teamtalk

本文主要是介绍TeamTalk路由服务器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

路由相关信令和协议设计

enum BuddyListCmdID {// ...... 暂时省略无关信令CID_BUDDY_LIST_USERS_STATUS_REQUEST = 522,CID_BUDDY_LIST_USERS_STATUS_RESPONSE = 523,// ...... 暂时省略无关信令
};message IMUsersStatReq{//cmd id:		0x020arequired uint32 user_id = 1;repeated uint32 user_id_list = 2;optional bytes attach_data = 20;
}message IMUsersStatRsp{//cmd id:		0x020brequired uint32 user_id = 1;repeated IM.BaseDefine.UserStat user_stat_list = 2;optional bytes attach_data = 20;
}enum UserStatType{USER_STATUS_ONLINE 	= 1;USER_STATUS_OFFLINE	= 2;USER_STATUS_LEAVE	= 3;
}

流程图

请添加图片描述

具体代码逻辑

  1. 在 g_user_map 中根据 user_id 查找对应的状态
  2. 如果不在列表设置为下线状态;如果在列表设置为对应的状态;
  3. 组包回复
void CRouteConn::_HandleUsersStatusRequest(CImPdu* pPdu)
{IM::Buddy::IMUsersStatReq msg;CHECK_PB_PARSE_MSG(msg.ParseFromArray(pPdu->GetBodyData(), pPdu->GetBodyLength()));uint32_t request_id = msg.user_id();uint32_t query_count = msg.user_id_list_size();log("HandleUserStatusReq, req_id=%u, query_count=%u ", request_id, query_count);IM::Buddy::IMUsersStatRsp msg2;msg2.set_user_id(request_id);msg2.set_attach_data(msg.attach_data());list<user_stat_t> result_list;user_stat_t status;for(uint32_t i = 0; i < query_count; i++){IM::BaseDefine::UserStat* user_stat = msg2.add_user_stat_list();uint32_t user_id = msg.user_id_list(i);user_stat->set_user_id(user_id);CUserInfo* pUser = GetUserInfo(user_id);if (pUser) {user_stat->set_status((::IM::BaseDefine::UserStatType) pUser->GetStatus()) ;}else{user_stat->set_status(USER_STATUS_OFFLINE) ;}}// send back query user statusCImPdu pdu;pdu.SetPBMsg(&msg2);pdu.SetServiceId(SID_BUDDY_LIST);pdu.SetCommandId(CID_BUDDY_LIST_USERS_STATUS_RESPONSE);pdu.SetSeqNum(pPdu->GetSeqNum());SendPdu(&pdu);
}CUserInfo* GetUserInfo(uint32_t user_id)
{CUserInfo* pUser = NULL;UserInfoMap_t::iterator it = g_user_map.find(user_id);if (it != g_user_map.end()) {pUser = it->second;}return pUser;
}

这篇关于TeamTalk路由服务器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

Python如何实现 HTTP echo 服务器

《Python如何实现HTTPecho服务器》本文介绍了如何使用Python实现一个简单的HTTPecho服务器,该服务器支持GET和POST请求,并返回JSON格式的响应,GET请求返回请求路... 一个用来做测试的简单的 HTTP echo 服务器。from http.server import HT

如何安装 Ubuntu 24.04 LTS 桌面版或服务器? Ubuntu安装指南

《如何安装Ubuntu24.04LTS桌面版或服务器?Ubuntu安装指南》对于我们程序员来说,有一个好用的操作系统、好的编程环境也是很重要,如何安装Ubuntu24.04LTS桌面... Ubuntu 24.04 LTS,代号 Noble NumBAT,于 2024 年 4 月 25 日正式发布,引入了众

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

速盾:直播 cdn 服务器带宽?

在当今数字化时代,直播已经成为了一种非常流行的娱乐和商业活动形式。为了确保直播的流畅性和高质量,直播平台通常会使用 CDN(Content Delivery Network,内容分发网络)服务器来分发直播流。而 CDN 服务器的带宽则是影响直播质量的一个重要因素。下面我们就来探讨一下速盾视角下的直播 CDN 服务器带宽问题。 一、直播对带宽的需求 高清视频流 直播通常需要传输高清视频

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

RTMP流媒体服务器 crtmpserver

http://www.oschina.net/p/crtmpserver crtmpserver又称rtmpd是Evostream Media Server(www.evostream.com)的社区版本采用GPLV3授权 其主要作用为一个高性能的RTMP流媒体服务器,可以实现直播与点播功能多终端支持功能,在特定情况下是FMS的良好替代品。 支持RTMP的一堆协议(RT