hsync 0.20.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Readme.md +1 -1
- package/cli.js +0 -3
- package/connection.js +39 -13
- package/dist/hsync.js +3 -3
- package/dist/hsync.min.js +1 -1
- package/lib/peers.js +30 -10
- package/lib/rtc-node.js +17 -14
- package/lib/rtc-web.js +15 -4
- package/package.json +1 -1
package/lib/peers.js
CHANGED
|
@@ -12,10 +12,6 @@ const fetch = require('./fetch');
|
|
|
12
12
|
|
|
13
13
|
function createPacket(topic, payload) {
|
|
14
14
|
let payloadStr = payload;
|
|
15
|
-
console.log('mqttPacket', { topic, payload });
|
|
16
|
-
// if (payload instanceof Uint8Array) {
|
|
17
|
-
// console.log('str payload', new TextDecoder().decode(payload));
|
|
18
|
-
// }
|
|
19
15
|
const packet = mqttPacket.generate({
|
|
20
16
|
qos: 0,
|
|
21
17
|
cmd: 'publish',
|
|
@@ -50,6 +46,7 @@ function initPeers(hsyncClient) {
|
|
|
50
46
|
if (!peer) {
|
|
51
47
|
debug('CREATING peer', hostName);
|
|
52
48
|
peer = createRPCPeer({hostName, hsyncClient, timeout});
|
|
49
|
+
peer.myAuth = b64id.generateId();
|
|
53
50
|
if (temporary) {
|
|
54
51
|
peer.rpcTemporary = true;
|
|
55
52
|
}
|
|
@@ -76,12 +73,13 @@ function initPeers(hsyncClient) {
|
|
|
76
73
|
|
|
77
74
|
peer.localMethods.rtcSignal = (peerInfo, signal) => {
|
|
78
75
|
debug('rtcSignal', signal.type);
|
|
79
|
-
if (signal.type === 'offer' && !peer.rtcCon && !signal.alreadySent) {
|
|
76
|
+
if (signal.type === 'offer') { // && !peer.rtcCon && !signal.alreadySent) {
|
|
77
|
+
peer.rtcStatus = 'connecting';
|
|
80
78
|
rtc.answerPeer(peer, signal);
|
|
81
79
|
} else if (signal.type === 'answer') {
|
|
82
80
|
peer.handleRtcAnswer(signal);
|
|
83
81
|
}
|
|
84
|
-
return
|
|
82
|
+
return `rtcSignal ${signal.type} handled ok`;
|
|
85
83
|
}
|
|
86
84
|
|
|
87
85
|
peer.rtcEvents.on('packet', async (packet) => {
|
|
@@ -100,6 +98,13 @@ function initPeers(hsyncClient) {
|
|
|
100
98
|
transport.receiveData(rpcMsg);
|
|
101
99
|
// return;
|
|
102
100
|
// }
|
|
101
|
+
} else if (p1 === 'jsonMsg') {
|
|
102
|
+
try {
|
|
103
|
+
const jsonMsg = JSON.parse(msg.payload.toString());
|
|
104
|
+
peer.rtcEvents.emit('jsonMsg', jsonMsg);
|
|
105
|
+
} catch (e) {
|
|
106
|
+
debug('error parsing jsonMsg', e);
|
|
107
|
+
}
|
|
103
108
|
} else if (p1 === 'socketData') {
|
|
104
109
|
handleSocketPacket(msg);
|
|
105
110
|
} else if (p1 === 'test') {
|
|
@@ -113,7 +118,7 @@ function initPeers(hsyncClient) {
|
|
|
113
118
|
});
|
|
114
119
|
|
|
115
120
|
peer.rtcEvents.on('dcOpen', () => {
|
|
116
|
-
debug('dcOpen');
|
|
121
|
+
debug(peer.answerer ? 'answerer' : 'offerer', 'dcOpen');
|
|
117
122
|
peer.packAndSend = (topic, payload) => {
|
|
118
123
|
const packet = createPacket(topic, payload);
|
|
119
124
|
if (topic === 'test') {
|
|
@@ -157,20 +162,35 @@ function initPeers(hsyncClient) {
|
|
|
157
162
|
|
|
158
163
|
peer.connectRTC = async () => {
|
|
159
164
|
debug('connectRTC');
|
|
165
|
+
peer.rtcStatus = 'connecting';
|
|
166
|
+
peer.rtcEvents.emit('connecting');
|
|
160
167
|
return new Promise(async (resolve, reject) => {
|
|
161
168
|
try {
|
|
162
169
|
const offer = await rtc.offerPeer(peer);
|
|
163
170
|
debug('offer', offer);
|
|
164
171
|
peer.rtcEvents.once('dcOpen', () => {
|
|
165
|
-
|
|
172
|
+
peer.rtcStatus = 'connected';
|
|
173
|
+
debug('offerer dcOpen!');
|
|
166
174
|
resolve(offer);
|
|
167
175
|
});
|
|
168
176
|
} catch (e) {
|
|
169
177
|
debug('error connecting to rtc', e);
|
|
178
|
+
peer.rtcStatus = 'error';
|
|
170
179
|
reject(e);
|
|
171
180
|
}
|
|
172
181
|
});
|
|
173
182
|
};
|
|
183
|
+
|
|
184
|
+
peer.sendJSONMsg = (msg) => {
|
|
185
|
+
if (typeof msg !== 'object') {
|
|
186
|
+
throw new Error('sendJSONMsg requires an object');
|
|
187
|
+
}
|
|
188
|
+
if (!peer.packAndSend) {
|
|
189
|
+
throw new Error('peer not connected');
|
|
190
|
+
}
|
|
191
|
+
const payload = JSON.stringify(msg);
|
|
192
|
+
peer.packAndSend('jsonMsg', payload);
|
|
193
|
+
};
|
|
174
194
|
|
|
175
195
|
transport.send = async (msg) => {
|
|
176
196
|
const fullMsg = {
|
|
@@ -240,14 +260,14 @@ function initPeers(hsyncClient) {
|
|
|
240
260
|
msg = JSON.stringify(msg);
|
|
241
261
|
}
|
|
242
262
|
const topic = `srpc/${hsyncClient.myHostName}`;
|
|
243
|
-
debug('↑ server rpc
|
|
263
|
+
debug('↑ server rpc outbound', msg);
|
|
244
264
|
hsyncClient.mqConn.publish(topic, Buffer.from(msg));
|
|
245
265
|
};
|
|
246
266
|
transport.receiveData = (msg) => {
|
|
247
267
|
if(msg) {
|
|
248
268
|
msg = JSON.parse(msg);
|
|
249
269
|
}
|
|
250
|
-
debug('↓ server rpc
|
|
270
|
+
debug('↓ server rpc inbound', msg);
|
|
251
271
|
transport.emit('rpc', msg);
|
|
252
272
|
};
|
|
253
273
|
const peer = rawr({transport, methods, timeout: 5000});
|
package/lib/rtc-node.js
CHANGED
|
@@ -32,6 +32,12 @@ function offerPeer(peer) {
|
|
|
32
32
|
let gatheringComplete = false;
|
|
33
33
|
let offerSent = false;
|
|
34
34
|
const start = Date.now();
|
|
35
|
+
|
|
36
|
+
peer.handleRtcAnswer = (answer) => {
|
|
37
|
+
debug('node handle RtcAnswer', answer.sdp.length);
|
|
38
|
+
peer.rtcCon.setRemoteDescription(answer.sdp, answer.type);
|
|
39
|
+
return 'node handle RtcAnswer ok';
|
|
40
|
+
}
|
|
35
41
|
|
|
36
42
|
async function sendOffer() {
|
|
37
43
|
const desc = con.localDescription();
|
|
@@ -86,10 +92,6 @@ function offerPeer(peer) {
|
|
|
86
92
|
dc.sendMessageBinary(packet);
|
|
87
93
|
};
|
|
88
94
|
peer.rtcEvents.emit('dcOpen', dc);
|
|
89
|
-
// dc.sendMessage("Hello from node from offerer");
|
|
90
|
-
// peer.dc.onStateChange((state) => {
|
|
91
|
-
// debug('dc state change', state);
|
|
92
|
-
// });
|
|
93
95
|
debug('keys', Object.keys(dc));
|
|
94
96
|
});
|
|
95
97
|
|
|
@@ -107,12 +109,6 @@ function offerPeer(peer) {
|
|
|
107
109
|
offerSent = true;
|
|
108
110
|
}
|
|
109
111
|
}, GATHERING_TIMEOUT);
|
|
110
|
-
|
|
111
|
-
peer.handleRtcAnswer = (answer) => {
|
|
112
|
-
debug('node handleRtcAnswer', answer.sdp.length);
|
|
113
|
-
con.setRemoteDescription(answer.sdp, answer.type);
|
|
114
|
-
return 'node handleRtcAnswer ok';
|
|
115
|
-
}
|
|
116
112
|
|
|
117
113
|
});
|
|
118
114
|
}
|
|
@@ -124,6 +120,7 @@ async function answerPeer(peer, offer) {
|
|
|
124
120
|
|
|
125
121
|
const con = new rtc.PeerConnection('pc', defaultOptions);
|
|
126
122
|
peer.rtcCon = con;
|
|
123
|
+
peer.answerer = true;
|
|
127
124
|
|
|
128
125
|
function sendAnswer() {
|
|
129
126
|
const desc = con.localDescription();
|
|
@@ -135,6 +132,16 @@ async function answerPeer(peer, offer) {
|
|
|
135
132
|
if (state === 'connected') {
|
|
136
133
|
peer.connected = true;
|
|
137
134
|
peer.rtcEvents.emit('connected', con);
|
|
135
|
+
} else if (state === 'disconnected') {
|
|
136
|
+
peer.connected = false;
|
|
137
|
+
peer.rtcEvents.emit('disconnected', con);
|
|
138
|
+
peer.rtcCon = null;
|
|
139
|
+
peer.dc = null;
|
|
140
|
+
} else if (state === 'closed') {
|
|
141
|
+
peer.connected = false;
|
|
142
|
+
peer.rtcEvents.emit('closed', con);
|
|
143
|
+
peer.rtcCon = null;
|
|
144
|
+
peer.dc = null;
|
|
138
145
|
}
|
|
139
146
|
});
|
|
140
147
|
|
|
@@ -163,10 +170,6 @@ async function answerPeer(peer, offer) {
|
|
|
163
170
|
dc.sendMessageBinary(packet);
|
|
164
171
|
};
|
|
165
172
|
peer.rtcEvents.emit('dcOpen', dc);
|
|
166
|
-
|
|
167
|
-
// peer.dc.onStateChange((state) => {
|
|
168
|
-
// debug('dc state change', state);
|
|
169
|
-
// });
|
|
170
173
|
});
|
|
171
174
|
|
|
172
175
|
}
|
package/lib/rtc-web.js
CHANGED
|
@@ -53,10 +53,20 @@ async function offerPeer(peer) {
|
|
|
53
53
|
};
|
|
54
54
|
|
|
55
55
|
con.onconnectionstatechange = (event) => {
|
|
56
|
-
debug('connection state', con.connectionState, event);
|
|
56
|
+
debug('offerer connection state', con.connectionState, event);
|
|
57
57
|
if(con.connectionState === 'connected') {
|
|
58
58
|
peer.connected = true;
|
|
59
59
|
peer.rtcEvents.emit('connected', con);
|
|
60
|
+
} else if (con.connectionState === 'disconnected') {
|
|
61
|
+
peer.connected = false;
|
|
62
|
+
peer.rtcEvents.emit('disconnected', con);
|
|
63
|
+
peer.rtcCon = null;
|
|
64
|
+
peer.dc = null;
|
|
65
|
+
} else if (con.connectionState === 'closed') {
|
|
66
|
+
peer.connected = false;
|
|
67
|
+
peer.rtcEvents.emit('closed', con);
|
|
68
|
+
peer.rtcCon = null;
|
|
69
|
+
peer.dc = null;
|
|
60
70
|
}
|
|
61
71
|
};
|
|
62
72
|
|
|
@@ -94,9 +104,9 @@ async function offerPeer(peer) {
|
|
|
94
104
|
}, GATHERING_TIMEOUT);
|
|
95
105
|
|
|
96
106
|
peer.handleRtcAnswer = (answer) => {
|
|
97
|
-
debug('
|
|
107
|
+
debug('web handle RtcAnswer', answer.sdp.length);
|
|
98
108
|
con.setRemoteDescription(answer);
|
|
99
|
-
return 'web
|
|
109
|
+
return 'web handle RtcAnswer ok';
|
|
100
110
|
}
|
|
101
111
|
});
|
|
102
112
|
}
|
|
@@ -107,6 +117,7 @@ async function answerPeer(peer, offer) {
|
|
|
107
117
|
// window.rtc = rtc;
|
|
108
118
|
|
|
109
119
|
peer.rtcCon = con;
|
|
120
|
+
peer.answerer = true;
|
|
110
121
|
|
|
111
122
|
let gatheringComplete = false;
|
|
112
123
|
const start = Date.now();
|
|
@@ -133,7 +144,7 @@ async function answerPeer(peer, offer) {
|
|
|
133
144
|
};
|
|
134
145
|
|
|
135
146
|
con.onconnectionstatechange = (event) => {
|
|
136
|
-
debug('connection state', con.connectionState, event);
|
|
147
|
+
debug('answerer connection state', con.connectionState, event);
|
|
137
148
|
if(con.connectionState === 'connected') {
|
|
138
149
|
peer.connected = true;
|
|
139
150
|
peer.rtcEvents.emit('connected', con);
|