1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
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];
}
};
|