diff --git a/README.md b/README.md index fa2c6b5..933b8da 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# WebRTC Connector for [Yjs](https://github.com/y-js/yjs) +# WebRTC Connector for [Yjs](https://github.com/yjs/yjs) It propagates document updates directly to all users via WebRTC. diff --git a/package.json b/package.json index bc175fd..9056785 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ ] }, "dependencies": { - "lib0": "^0.2.12", + "lib0": "^0.2.20", "simple-peer": "^9.6.2", "y-protocols": "^0.2.0" }, @@ -56,7 +56,7 @@ "rollup-plugin-terser": "^5.2.0", "standard": "^12.0.1", "typescript": "^3.7.5", - "yjs": "^13.0.0" + "yjs": "^13.0.4" }, "peerDependenies": { "yjs": "^13.0.0" diff --git a/src/y-webrtc.js b/src/y-webrtc.js index c4a8d81..a575afe 100644 --- a/src/y-webrtc.js +++ b/src/y-webrtc.js @@ -270,13 +270,18 @@ const announceSignalingInfo = room => { }) } +/** + * @param {Room} room + */ const broadcastBcPeerId = room => { - // broadcast peerId via broadcastchannel - const encoderPeerIdBc = encoding.createEncoder() - encoding.writeVarUint(encoderPeerIdBc, messageBcPeerId) - encoding.writeUint8(encoderPeerIdBc, 1) - encoding.writeVarString(encoderPeerIdBc, room.peerId) - broadcastBcMessage(room, encoding.toUint8Array(encoderPeerIdBc)) + if (room.provider.filterBcConns) { + // broadcast peerId via broadcastchannel + const encoderPeerIdBc = encoding.createEncoder() + encoding.writeVarUint(encoderPeerIdBc, messageBcPeerId) + encoding.writeUint8(encoderPeerIdBc, 1) + encoding.writeVarString(encoderPeerIdBc, room.peerId) + broadcastBcMessage(room, encoding.toUint8Array(encoderPeerIdBc)) + } } export class Room { @@ -525,6 +530,7 @@ export class WebrtcProvider extends Observable { * @param {string?} [opts.password] * @param {awarenessProtocol.Awareness} [opts.awareness] * @param {number} [opts.maxConns] + * @param {boolean} [opts.filterBcConns] */ constructor ( roomName, @@ -533,12 +539,14 @@ export class WebrtcProvider extends Observable { signaling = ['wss://signaling.yjs.dev', 'wss://y-webrtc-uchplqjsol.now.sh', 'wss://y-webrtc-signaling-eu.herokuapp.com', 'wss://y-webrtc-signaling-us.herokuapp.com'], password = null, awareness = new awarenessProtocol.Awareness(doc), - maxConns = 20 + math.floor(random.rand() * 15) // just to prevent that exactly n clients form a cluster + maxConns = 20 + math.floor(random.rand() * 15), // just to prevent that exactly n clients form a cluster + filterBcConns = true } = {} ) { super() this.roomName = roomName this.doc = doc + this.filterBcConns = filterBcConns /** * @type {awarenessProtocol.Awareness} */