var peer = new Peer ( ) ;
peer . on ( 'open' , function ( id ) {
document . getElementById ( "id" ) . innerHTML = id
} ) ;
setTimeout ( ( ) => {
document . getElementById ( "connectToPeerID" ) . value = ""
} , 1 ) ;
function connect ( ) {
peerID = document . getElementById ( "connectToPeerID" ) . value
var conn = peer . connect ( peerID )
console . log ( "Initiated connection to: " + peerID )
peerlist [ conn . peer ] = conn
conn . on ( 'open' , function ( ) {
// Receive messages
conn . on ( 'data' , function ( data ) {
handleData ( conn , data , "My Connection" )
} )
} )
}
// mediaStream = navigator.mediaDevices.getUserMedia({ audio: true, video: false })
peerlist = { }
function handleData ( conn , data , who ) {
if ( document . getElementById ( "preChat" ) . style . visibility != "hidden" ) {
document . getElementById ( "preChat" ) . style . visibility = "hidden"
document . getElementById ( "preChat" ) . style . height = 0
document . getElementById ( "connectButton" ) . style . height = 0
document . getElementById ( "chatWrapper" ) . style . visibility = "visible"
}
if ( typeof data == "object" && data . peerID != document . getElementById ( "id" ) . innerHTML && typeof peerlist [ data . peerID ] == "undefined" ) {
var conn = peer . connect ( data . peerID )
peerlist [ conn . peer ] = conn
conn . on ( 'open' , function ( ) {
// Receive messages
conn . on ( 'data' , function ( data ) {
handleData ( conn , data , "My Connection" )
} )
} )
} else if ( typeof data == "object" && data . peerID == document . getElementById ( "id" ) . innerHTML ) {
// do nothing
} else if ( typeof peerlist [ data . peerID ] != "undefined" ) {
// do nothing
} else {
chat ( data , conn . peer )
}
}
function makeNoise ( ) {
message = document . getElementById ( "chatSend" ) . value
document . getElementById ( "chatSend" ) . value = ""
Object . keys ( peerlist ) . forEach ( element => {
peerlist [ element ] . send ( message )
} )
chat ( message , document . getElementById ( "id" ) . innerHTML )
message = ""
}
function startCall ( ) {
alert ( "No" )
}
setInterval ( ( ) => {
// We can make this nicer by sending the last contact everything and every contact our most recent, but not sending everything to everyone except periodically, like once a minute
Object . keys ( peerlist ) . forEach ( contact => {
Object . keys ( peerlist ) . forEach ( peerDetail => {
peerlist [ contact ] . send ( { peerID : peerDetail } )
} )
} )
} , 5000 ) ;