我有以下代码:
openTokInit() {
this.session = OT.initSession(this.tokboxApiKey, this.sessionId);
const self = this;
this.session.on('connectionCreated', function(event) {
self.connectionCount++;
});
if (this.connectionCount < 2) {
this.session.connect(this.token, err => {
if (err) {
reject(err);
} else {
resolve(this.session);
}
});
}
问题是当if语句运行时,connectionCount始终为0,因为几秒钟后会触发'connectionCreated'事件。我不清楚如何在连接新 session 之前适当地等待所有connectionCreated事件触发。
最佳答案
OpenTok团队的Adam。
连接之前,您不会获得“connectionCreated”事件。因此,如果您已经连接并且您是第3个(或更多)参与者,则需要断开连接。我将使用connection.creationTime来查看谁先到达那里,以避免两个人同时连接,并且两个人都断开连接。这样的事情应该可以解决问题:
session = OT.initSession(apiKey, sessionId);
let connectionsBeforeUs = 0;
session.on('connectionCreated', (event) => {
if (event.connection.connectionId !== session.connection.connectionId &&
event.connection.creationTime < session.connection.creationTime) {
// There is a new connection and they got here before us
connectionsBeforeUs += 1;
if (connectionsBeforeUs >= 2) {
// We should leave there are 2 or more people already here before us
alert('disconnecting this room is already full');
session.disconnect();
}
}
});
session.connect(token);
Here is a jsbin that demonstrates it working。
我不确定您的整个应用程序如何工作,但是另一种选择可能是在服务器端执行此操作,并且只分发2个 token 供人们连接。因此,当他们尝试获取第3个 token 时,您会在此时将其屏蔽。而不是让他们连接到 session ,然后断开自己的连接。这种方法的优点是您可以更快地注意到并更快地向用户提供反馈。同样,恶意用户也不能只是破解JavaScript并进行连接。您还可以使用session monitoring API跟踪从服务器连接的用户。
另一个选择是再次使用forceDisconnect()函数将某人踢出一个房间(如果房间中已经有2个人)。因此,已经在房间里的人有责任踢出第三位参与者,而不是第三位参与者,因为他注意到那里已经有人离开了自己。这将意味着恶意人员无法在其浏览器中破解JavaScript代码并进入其他人的房间。
尽管不了解整个应用程序,但是很难知道什么是最佳选择。
我希望这有帮助!