summaryrefslogtreecommitdiff
path: root/src/js_bridge.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js_bridge.js')
-rw-r--r--src/js_bridge.js66
1 files changed, 44 insertions, 22 deletions
diff --git a/src/js_bridge.js b/src/js_bridge.js
index 0b5ba08..ecbbd70 100644
--- a/src/js_bridge.js
+++ b/src/js_bridge.js
@@ -10,8 +10,10 @@ function genRanHex(size) {
window.PEER = {
event_queue: [],
peers: {},
- message_queue: [],
+ 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;
@@ -19,6 +21,11 @@ window.PEER = {
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;
@@ -27,10 +34,12 @@ window.PEER = {
PEER.peers[name].on(e, function(data) {
console.log("[JS] Peer " + name + " received " + e);
if(e == "connection"){
- PEER.connections[[name,data.peer]] = data;
+ 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.message_queue.push({"message":message, "data":{
+ PEER.peer_message_queue.push({"message":message, "data":{
"call": "on",
"peer": name,
"e": e,
@@ -39,12 +48,17 @@ window.PEER = {
});
},
connect: function(tbl) {
- var name = tbl.name;
- var id = tbl.id;
- console.log("[JS] connecting " + name + " to " + id);
- var conn = PEER.peers[name].connect(id);
- PEER.connections[[name,id]] = conn;
- return [name,id];
+ 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();
@@ -56,13 +70,13 @@ window.PEER = {
PEER.peers[tbl.name].destroy();
},
send: function(tbl){
- var name = tbl.name;
- var id = tbl.id;
+ var source = tbl.source;
+ var dest = tbl.dest;
var data = tbl.data;
- console.log("[JS] " + name + " is sending " + data + " to " + id);
- console.log(PEER.connections[[name,id]]);
+ console.log("[JS] " + source + " is sending " + data + " to " + dest);
+ console.log(PEER.connections[[source,dest].sort()]);
console.log(data);
- PEER.connections[[name,id]].send(data);
+ PEER.connections[[source,dest].sort()].send(data);
},
close: function(tbl){
var name = tbl.name;
@@ -70,20 +84,28 @@ window.PEER = {
PEER.connections[[name,id]].close();
},
conn_on: function(tbl){
- var name = tbl.name;
- var id = tbl.id;
+ var source = tbl.source;
+ var dest = tbl.dest;
var e = tbl.e;
var message = tbl.message;
- console.log("[JS] Setting hook for [" + name + "," + id + "] " + e + "," + message);
- PEER.connections[[name,id]].on(e, function(c) {
- console.log("[JS] connection between " + name + " and " + id + " received " + e);
- PEER.message_queue.push({"message":message, "data":{
+ 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": name,
- "id": id,
+ "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];
+ }
};