diff options
| author | Alex Pickering <alex@cogarr.net> | 2026-02-01 13:14:32 -0600 |
|---|---|---|
| committer | Alexander M Pickering <alex@cogarr.net> | 2026-02-01 13:14:32 -0600 |
| commit | 3a975db66a3711f34e8b64bb27a8eaca79fdeca9 (patch) | |
| tree | fcc12f8f9d638ff575c1963796de76b7628854b4 /src/js_bridge.js | |
| download | ggj26-3a975db66a3711f34e8b64bb27a8eaca79fdeca9.tar.gz ggj26-3a975db66a3711f34e8b64bb27a8eaca79fdeca9.tar.bz2 ggj26-3a975db66a3711f34e8b64bb27a8eaca79fdeca9.zip | |
Diffstat (limited to 'src/js_bridge.js')
| -rw-r--r-- | src/js_bridge.js | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/src/js_bridge.js b/src/js_bridge.js new file mode 100644 index 0000000..f6a158b --- /dev/null +++ b/src/js_bridge.js @@ -0,0 +1,134 @@ +var s = document.createElement('script'); +s.setAttribute('src','https://unpkg.com/peerjs@1.5.5/dist/peerjs.min.js'); +document.body.appendChild(s); +function genRanHex(size) { + return Array.apply(null,Array(size)).map(function(){ + return Math.floor(Math.random() * 16).toString(16); + }).join(''); + +} +window.PEER = { + event_queue: [], + peers: {}, + peer_message_queue: [], + connection_message_queue: [], + creation_queue: [], + connections: {}, + to_connect: [], // Sometimes we have to wait a tick before the connection is ready. + create: function(_) { + var peer = new Peer({ + //"host": "cogarr.net", + //"path": "/stun/", + //"secure": true, + //"debug": 3 + }); + peer.on("open", function(){ + console.log("[JS] Open called on peer"); + PEER.peers[peer.id] = peer; + PEER.creation_queue.push(peer.id); + }); + peer.on("error", function(msg){ + //console.log("[JS ERROR] " + msg); + PEER.connection_message_queue.push({"message":msg, "data": { + "call": "create", + "e": "error", + "message": msg + }}); + }); + }, + 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"){ + // Store the server-side DataConnection under directional key [server, client] + PEER.connections[[name,data.peer]] = data; + //console.log("[JS] Peer.connections is now"); + //console.log(PEER.connections); + // Rewrite for Lua so net.rewrite_events can build a Hub-side Connection + data = [name,data.peer]; // [server, client] + }else{ + //console.log("[JS] Not connection:" + e + ":" + data); + } + PEER.peer_message_queue.push({"message":message, "data":{ + "call": "on", + "peer": name, + "e": e, + "data": data + }}); + //console.log("[JS] Message queue is now"); + //console.log(PEER.peer_message_queue); + }); + }, + 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); + // Store client-side DataConnection under directional key [client, hub] + PEER.connections[[source,dest]] = 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; + var key = [source,dest]; + //console.log("[JS] sending " + data + " over " + key); + //console.log(PEER.connections[key]); + //console.log(data); + PEER.connections[key].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 [" + source + "," + dest + "] " + e + "," + message); + //console.log(PEER.connections[[source,dest]]); + //console.log(PEER.connections); + PEER.connections[[source,dest]].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]][field]; + } +}; |
