项目说明 - OrdinaryRoad-Project/ordinaryroad-live-chat-client GitHub Wiki

3 项目说明

3.1 commons模块

主要是抽象接口、抽象类的定义

3.1.1 commons-base

定义了一些基础的接口、抽象类:消息、消息监听器、连接连监听器

  • 消息接口
    • IMsg:所有msg都应该实现该接口
      • ICmdMsg:有些平台的一些消息正文中没有消息类型cmd字段,例如B站的心跳包,因此再细分为cmdMsg
      • IDanmuMsg: 内置获取用户ID、用户名、用户头像、粉丝牌名称、粉丝牌等级、弹幕内容等方法
        • ISuperChatMsg:醒目留言,内置获取持续时间方法
      • IGiftMsg: 内置获取发送方ID、发送方用户名、发送方头像、接收方ID、接收方用户名、礼物名称、礼物图片、礼物ID、礼物个数、礼物单价等方法
      • IEnterRoomMsg: 内置获取用户ID、用户名、用户头像、粉丝牌名称、粉丝牌等级方法
      • ILikeMsg: 内置获取用户ID、用户名、用户头像、粉丝牌名称、粉丝牌等级、点赞数方法
      • ILiveStatusChangeMsg: 内置获取状态变化方法
  • 消息监听器
    • IBaseMsgListener(所有平台都支持,其他消息监听器存在平台差异)
      • onMsg:所有消息(不管消息内容)都会调用,不包括由该消息的某个字段派生出的消息,例如快手的弹幕礼物等消息是SC_FEED_PUSH中的字段,因此onMsg中不会出现处理后的弹幕、礼物消息,而是包含弹幕、礼物等的SCWebFeedPushCMD消息
      • onCmdMsg:cmd消息(消息体中有表示消息类型的字段时),并且该类型需要处理(例如心跳回复包不需要处理)时调用
      • onOtherCmdMsg:该消息类型不需要处理(例如PK、点赞数更新等类型)时调用
      • onUnknownCmd:该消息类型未知(没有对应的枚举类)时调用
    • IDanmuMsgListener(所有平台)
      • onDanmuMsg:收到弹幕消息
    • IGiftMsgListener(所有平台,快手礼物消息不全,缺少礼物单价、接收方信息)
      • onGiftMsg:收到礼物消息(抖音、快手平台需要判断礼物个数是否大于0)
    • ISuperChatMsgListener(B站)
      • onSuperChatMsg:收到醒目留言
    • IEnterRoomMsgListener(B站、斗鱼、抖音,虎牙只能接收到高级用户的入房回调)
      • onEnterRoomMsg:进入房间消息回调
    • ILikeMsgListener(B站、快手、抖音支持获取点赞的个数)
      • onLikeMsg:收到点赞消息
    • ILiveStatusChangeListener(B站、抖音测试只有下播消息)
      • onLiveStatusMsg:收到状态变化消息
    • IRoomStatsMsgListener(B站,抖音和快手没有累计观看人数信息)
      • onRoomStatsMsg:收到信息统计消息

3.1.2 commons-client

  • 定义了Client的配置:连接地址、房间id、Cookie、心跳、自动重连等相关参数
  • 定义了Client的一些方法:初始化、销毁、连接、断开、添加消息回调、移除消息回调、发送弹幕、为主播点赞等
  • 定义了Client的生命周期

3.1.3 commons-util

  • 一些工具类:时间、反射、Cookie

3.2 servers模块

对所使用的连接工具的抽象

3.2.1 servers-netty

  • 定义了连接处理Handler
  • 定义了数据处理Handler

3.2.2 servers-netty-client

基于Netty实现的Client

  • 扩展了Client、ClientConfig
  • 扩展Handler增加了Client成员变量

3.3 clients模块

对使用Netty作为连接工具的servers-netty-client的具体实现

  • client-bilibili
  • client-douyu
  • client-huya
  • client-douyin
  • client-kuaishou
  • client-websocket

3.4 codec模块

  1. 解码decode:根据平台协议,对收到的二进制流进行解码
  2. 编码encode:根据平台协议,将消息编码为二进制流
  • codec-bilibili
    • BilibiliCodecUtil
    • BilibiliMsgFactory
  • codec-douyu
    • DouyuCodecUtil
    • DouyuMsgFactory
  • codec-huya
    • HuyaCodecUtil
    • HuyaMsgFactory
  • codec-douyin
  • codec-kuaishou

由于抖音和快手使用的都是Protobuf协议,目前版本暂未实现CodecUtil工具类,可以参考DouyinCodecHandlerKuaishouCodecHandler中的编解码实现