基于Tars高并发IM系统的设计与实现-实战篇6

基于Tars高并发IM系统的设计与实现-实战篇6

客户端设计实现

客户端采用跨平台SDK+原生UI的方案。
此处重点介绍SDK实现,UI用户可以根据自己需求进行开发。

方案架构图:

在这里插入图片描述

方案实现:
  • TCP链接
    CTcpSocket
    CSSLSocket

  • 长链接维护、数据收发
    CTNSendRecvThread

  • OMTP数据报文处理
    CTNProcessThread

  • 日志记录
    CLog

  • SDK对外接口及回调接口
    ITnImSdkCallback

 /**
     * OMTP回调接口
     */
    class IOtimSdkCallback
    {
    public:
        virtual ~IOtimSdkCallback(){}
        
    
        virtual void netStatusChanged(int32_t status) = 0;
   
        virtual void loginResp(int32_t code, const std::string &clientId) = 0;
    
   
        virtual void kickOut() = 0;
   
        virtual void hotSessionResp(otim::HotSessionResp* hotSessions) = 0;
     
        virtual void msgRecv(int type, const std::string &packId, otim::MsgReq* req) = 0;
   
        virtual void msgAck(const std::string &packId, otim::MsgAck* ack) = 0;     
    };
       
    class IOtimSdk
    {
    public:
        virtual ~IOtimSdk(){}
        
        /**
         * 增加IM 服务器ip地址和端口
         * @param host ip地址
         * @param port 端口
         * @param isSSL 是否支持ssl连接
         */
        virtual void addHostInfo(const std::string&  host, int32_t port, bool isSSL) = 0;
        
        /**
         * 设置SDK 回调指针
         * @param callback 回调接口指针
         */
        virtual void setCallback(IOtimSdkCallback* callback) = 0;
        /**
         * 登录
         * @param name 用户名,可以不填写
         * @param password 密码,必须填写token
         */
        virtual int32_t login (const std::string&  name, const std::string&  password) = 0;
        /**
         * 登出
         * @param notifyServer 是否向server发送数据报文
         */
        virtual int32_t logout (bool notifyServer) = 0;
        /**
         * 发送消息
         * @param message 消息体
         */

        virtual int32_t sendMessage(int type, otim::MsgReq& req) = 0;

        /**
         * 获取网络状态
         */
        virtual int32_t getNetStatus() = 0;
        
        //获取当前clientId
        virtual std::string getClientId() = 0;
        
        /**
            * 请求用户信息
            * @param userIds 用户Id列表
            */
        virtual void reqUserinfosFromServer(std::vector<std::string> userIds) = 0;
        
     };
    
    
    /**
     * 日志记录接口
     */
    class IOtimLog{
    public:
        virtual ~IOtimLog(){}

        /**
         * 写日志
         * @param logs 日志内容
         */
        virtual void writeLog(const std::string& logs) = 0;
        
        /**
         * 获取日志文件名称及路径
         * @return 日志文件路径及名称 外部必须释放 返回字符串内存
         */
        virtual const std::string& getLogFileName() = 0;
        
    };
    
    /**
     * 初始化日志模块
     * @param appPath 日志保存路径
     */
    void initLog(const std::string& appPath);
    /**
     * 获取日志接口实例,调用此接口前必须调用 initLog
     */
    IOtimLog* getLogInstance();
    
    /**
     * 初始化IM 模块
     * @param clientInfo IM 所需要的参数
     */
    IOtimSdk* initIm(TNClientInfo &clientInfo);
    
  
    /**
     * 获取IMSDK IM模块实例
     * 调用此函数前必须调用 initIm接口
     */
    IOtimSdk* getImSDK();

源码说明

源码地址

https://github.com/lanhy/otim.git

目录说明
  • doc
    • 文档目录,目前有两个文档著作
    • 《基于Tars高并发IM系统的设计与实现》
    • 《OMTP协议说明文档》
  • client
    • 客户端SDK及示例代码
  • server
    • 服务端代码,基于Tars微服务架构的IM系统相关子服务;
  • test
    • 自动测试代码;
服务端源码结构
  • BrokerServer
    接入服务
  • HttpServer
    开放平台及接口服务
  • AuthServer
    认证服务
  • GroupChatServer
    群聊服务
  • PushServer
    离线push服务
  • BizMsgServer
    业务通知消息服务
  • HistoryMsgServer
    离线(历史)消息服务
  • SingleChatServer
    单聊服务
  • UserFriendServer
    用户好友服务开放平台及接口服务
  • MsgOperatorServer
    消息操作服务
  • OlapServer
    Mysql冷存储服务
  • third
    第三方库
  • Common
    公共模块
  • CommonTars
    OMTP协议Tars文件
客户端SDK源码结构
  • lib
    第三方库
  • source
    客户端SDK代码
  • source
    客户端SDK代码
  • OMTP
  • TestSDK
    SDK调用实例
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值