aboutsummaryrefslogtreecommitdiff
path: root/src/js_bridge.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js_bridge.js')
-rw-r--r--src/js_bridge.js134
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];
+ }
+};