如果用户发布到tokbox会话,并且出于同一用户在其他设备上登录的任何原因或在另一个浏览器窗口中重新打开会话,我想阻止第二个发布。
幸运的是,在流的元数据上,我正在保存用户ID,因此当存在流列表时,如果现有流属于已登录的用户,则很容易看到。
当发布商初始化时,会发生以下情况:
session.on("streamCreated")
,订阅新流问题是,当会话初始化时,无法检查会话的当前流以查看该用户是否已经发布。在on("streamCreated")
回调触发之前,我们不知道流是什么。
我预感到有一个我想念的简单解决方案。有什么想法吗?
答案 0 :(得分:1)
我假设当您说您在流元数据上保存用户ID时,这意味着在初始化Publisher时,您需要设置“name”属性。这是一项很棒的技巧。
我的想法有点像黑客,但它是我现在能想到的最好的。我会通过将流的订阅分为两个阶段来解决这个问题:
在#1期间,我会检查每个流的“name”属性,看它是否属于此客户端连接的用户。如果是,那么你知道他们正在进入会话两次你可以设置一个标志(让我们称之为"userRejoining"
。为了知道#1已经完成,我会设置一个计时器(这就是我打电话的原因)它是一个合理的时间,例如每次"streamCreated"
事件到来时为1秒,并删除任何先前的计时器。
然后,如果未设置"userRejoining"
标志,则初始化发布者并将其发布到会话。
在#2期间,您只需订阅任何已创建的流。
缺点是你现在已经将你的发布用户体验延迟了大约1秒。在较大的群体情景中,这可能是一个交易破坏者,但在较小的(1:1)类型的会话中,这应该是可接受的。我希望这个解释很明确,如果没有,我可以尝试为你编写一些示例代码。