WebRTC DataChannel for "many-to-many" peers connection
This "DataChannel" library is derivation of original work (DataChannel.js) of Muaz Khan
const preStoredUserId = 'your-user-id' AuthChainJSDataChannel.Config({ // preferred signaling server (fallback to backnodes list [case have]) server: 'wss://server-signaling-address', debug: true }).then((DataChannel) => { /** `{Object}` DataChannel: { channel: {Object}, DataChannel object server: {String}, Valid server signaling pool: {String} Pool of channel (remember: max 256 peers by pool) } */ const CHANNEL = new DataChannel.channel(DataChannel.pool, preStoredUserId) CHANNEL.openSignalingChannel = function(config) { config.channel = config.channel || this.channel let websocket = new WebSocket(DataChannel.server) websocket.channel = config.channel websocket.onopen = function() { websocket.push(JSON.stringify({ open: true, channel: config.channel })) if ( config.callback ) { config.callback(websocket) } } websocket.onmessage = function(event) { try { config.onmessage(JSON.parse(event.data)) } catch(e) {} // silent fail for non `JSON` data (failed "parse") } websocket.push = websocket.send websocket.send = function(data) { websocket.push(JSON.stringify({ data: data, channel: config.channel })) } } // create your channel CHANNEL.open() // searching for existing channels CHANNEL.connect() // events -------------------------------- CHANNEL.ondatachannel = function(channel00) { // "ondatachannel" is fired for each new data channel found CHANNEL.join(channel00) // join on this new channel discovered } CHANNEL.onopen = function() {} // when the connection between the pairs is established (after the `.join()`) CHANNEL.onmessage = function(data, userid, latency) {} // receive message (latency measure in 'ms') CHANNEL.onleave = function(userid) {} // detect users left CHANNEL.onerror = function(event) {} // error to open data ports CHANNEL.onclose = function(event) {} // data ports suddenly dropped // methods ------------------------------- CHANNEL.leave() // close your own entire data session (left) CHANNEL.eject(userid) // throw a user out of your channel CHANNEL.send(message) // broadcast message to all users in your channel CHANNEL.channels[userid].send(message) // direct message for an user in your channel }).catch(e => { throw new Error(e) })
Many things to do ... a listing will be created later
Your contribution to this code will be welcomed, please see the contribution guide
This work is only possible thanks to the use of open source librarie DataChannel.js written by Muaz Khan
This source code is licensed under The MIT License (MIT)
If you believe that the other sources (of third parties) may contain a conflict with this license please contact us in this email: authchainjs@gmail.com