summaryrefslogtreecommitdiff
path: root/src/js_bridge.js
blob: ecbbd708e6dfd97d6327e997f9c76a52d6e8ddfd (plain)
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];
	}
};