saermart/DouyinLiveWebFetcher

收取礼物包问题

KanyShigure opened this issue · 1 comments

1.收取的礼物通讯包会是两个一样的先后发送,导致同一个礼物接收两次,需要一个静态列表检测礼物包是否收过
2.在观众多次点击送礼物连击的时候,会重复接收礼物包导致数量偏多,和上一个问题类似,但收到的不是同一个包,包id不一样

我来提供我的思路吧,首先感谢repo作者的开源贡献。

  1. 对于 sendType 不等于4的情况(一般为1),说明送的是普通礼物,可以直接取 groupCount 作为当前送礼行为的礼物数量。
  2. 对于 sendType 等于4的情况,说明送的是连击礼物,这个时候需要分类讨论:
    • repeatEnd 等于0,则礼物消息是连击送礼阶段实时产生的消息,comboCount 的数值是 本次连击的累计礼物数量

      为什么是累计数量呢?经过观察发现不一定每次连击都会产生消息,比如 comboCount 的数值可能是:1、2、3、5、6这样跳跃增长的,也就是说中途可能会少那么一两次记录,减少了消息量,节省了网络资源,但连击礼物总数是不会错的。

    • repeatEnd 等于1,则礼物消息是连击送礼结束后的汇总消息,comboCount 的数值就是本次连击礼物总数。

注意,以上 普通礼物连击礼物 是我自己定义的名称。

因此,对于连击礼物(sendType 等于4),如果只关心礼物总量,那么只需要考虑repeatEnd为1的那一个消息就可以了。如果关心消息的实时性,可以维护一个记录连击礼物行为和累计礼物数量的表,计算每次的 comboCount 差值,从而获得近似数量准确的实时礼物消息。

值得注意的是,涉及礼物数量的有 groupCount repeatCount comboCount totalCount似乎 groupCountcomboCount至少一个数值必为 1,而repeatCounttotalCount的数值均等于groupCountcomboCount的最大值(或是乘积)。

如果有错误,欢迎指出。