var s = document.createElement('script'); s.setAttribute('src','https://unpkg.com/peerjs@1.5.2/dist/peerjs.min.js'); document.body.appendChild(s); function genRanHex(size) { return Array.apply(null,Array(size)).map(function(){ Math.floor(Math.random() * 16).toString(16); }).join(''); } window.PEER = { event_queue: [], peers: {}, peer_message_queue: [], connection_message_queue: [], connections: {}, to_connect: [], // Sometimes we have to wait a tick before the connection is ready. create: function(tbl) { var name = tbl.name; var options = tbl.options; console.log("[JS] Creating peer " + name); var peer = new Peer(name, options); PEER.peers[name] = peer; }, delete_peer: function(tbl) { var name = tbl.name; console.log("[JS] Deleting peer " + name); delete PEER.peers[name]; }, on: function(tbl) { var name = tbl.name; var e = tbl.e; var message = tbl.message; console.log("[JS] Setting hook for " + name + "," + e + "," + message); PEER.peers[name].on(e, function(data) { console.log("[JS] Peer " + name + " received " + e); if(e == "connection"){ PEER.connections[[name,data.peer].sort()] = data; console.log("[JS] Peer.connections is now"); console.log(PEER.connections); data = [name,data.peer]; // rewrite connections } PEER.peer_message_queue.push({"message":message, "data":{ "call": "on", "peer": name, "e": e, "data": data }}); }); }, connect: function(tbl) { var source = tbl.source; var dest = tbl.dest; console.log("[JS] connecting " + source + " to " + dest); var conn = PEER.peers[source].connect(dest); PEER.connections[[source,dest].sort()] = conn; // Send a hello to always establish a connection console.log("[JS] sending hello");// doesn't seem to show up in the output, but its needed so we don't drop the first message. conn.send("Hello"); console.log("[JS] Connect called, PEER.connections is"); console.log(PEER.connections); return [source,dest]; }, disconnect: function(tbl) { PEER.peers[tbl.name].disconnect(); }, reconnect: function(tbl){ PEER.peers[tbl.name].reconnect(); }, destroy: function(tbl){ PEER.peers[tbl.name].destroy(); }, send: function(tbl){ var source = tbl.source; var dest = tbl.dest; var data = tbl.data; console.log("[JS] " + source + " is sending " + data + " to " + dest); console.log(PEER.connections[[source,dest].sort()]); console.log(data); PEER.connections[[source,dest].sort()].send(data); }, close: function(tbl){ var name = tbl.name; var id = tbl.id; PEER.connections[[name,id]].close(); }, conn_on: function(tbl){ var source = tbl.source; var dest = tbl.dest; var e = tbl.e; var message = tbl.message; console.log("[JS] Setting hook for [" + dest + "," + source + "] " + e + "," + message); console.log(PEER.connections[[dest,source]]); console.log(PEER.connections); PEER.connections[[dest,source].sort()].on(e, function(c) { console.log("[JS] connection between " + dest + " and " + source + " received " + e); PEER.connection_message_queue.push({"message":message, "data":{ "call": "on", "peer": source, "dest": dest, "e": e, "data": c }}); }); }, conn_field: function(tbl){ var name = tbl.name; var id = tbl.id; var field = tbl.field; return PEER.connections[[name,id].sort()][field]; } };