hsync 0.28.0 → 0.30.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/lib/peers.js CHANGED
@@ -74,14 +74,20 @@ function initPeers(hsyncClient) {
74
74
  peer.localMethods = Object.assign({}, hsyncClient.peerMethods);
75
75
  peer.sockets = {};
76
76
 
77
- peer.localMethods.rtcSignal = (peerInfo, signal) => {
77
+ peer.localMethods.rtcSignal = async (peerInfo, signal) => {
78
78
  debug('rtcSignal', signal.type);
79
- if (signal.type === 'offer') { // && !peer.rtcCon && !signal.alreadySent) {
80
- peer.rtcStatus = 'connecting';
81
- rtc.answerPeer(peer, signal);
82
- } else if (signal.type === 'answer') {
83
- peer.handleRtcAnswer(signal);
79
+ try{
80
+ if (signal.type === 'offer') { // && !peer.rtcCon && !signal.alreadySent) {
81
+ peer.rtcStatus = 'connecting';
82
+ await rtc.answerPeer(peer, signal);
83
+ } else if (signal.type === 'answer') {
84
+ await peer.handleRtcAnswer(signal);
85
+ }
86
+ } catch (e) {
87
+ debug('error handling rtcSignal', e, signal);
88
+ return e.message;
84
89
  }
90
+
85
91
  return `rtcSignal ${signal.type} handled ok`;
86
92
  }
87
93
 
@@ -205,7 +211,18 @@ function initPeers(hsyncClient) {
205
211
 
206
212
  debug('↑ peer rpc', peer.dcOpen ? 'RTC' : 'REST', `${hostName}/_hs/rpc`, msg.method);
207
213
 
208
- if (peer.dcOpen) {
214
+ let msgObj = msg;
215
+ if (typeof msg !== 'object') {
216
+ try {
217
+ msgObj = JSON.parse(msg);
218
+ } catch (e) {
219
+ msgObj = {error: 'invalid JSON'};
220
+ }
221
+ }
222
+
223
+ // sometimes it takes a while for RTC do detect a disconnect
224
+ // do not rtcSignal messages over the RTC connection
225
+ if (peer.dcOpen && (msgObj.method !== 'rtcSignal')) {
209
226
  let payload = msg;
210
227
  if (typeof msg === 'object') {
211
228
  payload = JSON.stringify(payload);
@@ -280,10 +297,12 @@ function initPeers(hsyncClient) {
280
297
  hsyncClient.cachedPeers = cachedPeers;
281
298
  hsyncClient.getRPCPeer = getRPCPeer;
282
299
  hsyncClient.createServerPeer = createServerPeer;
300
+ hsyncClient.createRPCPeer = createRPCPeer;
283
301
 
284
302
  peerLib.cachedPeers = cachedPeers;
285
303
  peerLib.getRPCPeer = getRPCPeer;
286
304
  peerLib.createRPCPeer = createRPCPeer;
305
+ peerLib.createServerPeer = createServerPeer;
287
306
 
288
307
  return peerLib;
289
308
  }
package/lib/rtc-node.js CHANGED
@@ -33,9 +33,9 @@ function offerPeer(peer) {
33
33
  let offerSent = false;
34
34
  const start = Date.now();
35
35
 
36
- peer.handleRtcAnswer = (answer) => {
36
+ peer.handleRtcAnswer = async (answer) => {
37
37
  debug('node handle RtcAnswer', answer.sdp.length);
38
- peer.rtcCon.setRemoteDescription(answer.sdp, answer.type);
38
+ await peer.rtcCon.setRemoteDescription(answer.sdp, answer.type);
39
39
  return 'node handle RtcAnswer ok';
40
40
  }
41
41
 
package/lib/rtc-web.js CHANGED
@@ -86,27 +86,33 @@ async function offerPeer(peer) {
86
86
  peer.dcOpen = true;
87
87
  peer.dc = dc;
88
88
  peer.rtcSend = (packet) => {
89
+ debug('sending packet', packet.toString(), dc.readyState);
89
90
  dc.send(packet);
90
91
  };
91
92
  peer.rtcEvents.emit('dcOpen', dc);
92
93
  // dc.send('yo waddup from the browser');
93
94
  };
95
+
96
+ try {
97
+ const offer = await con.createOffer({offerToReceiveAudio:true, offerToReceiveVideo:true});
98
+ await con.setLocalDescription(offer);
99
+
100
+ setTimeout(() => {
101
+ if (!gatheringComplete) {
102
+ debug('didnt finish gathering');
103
+ sendOffer();
104
+ offerSent = true;
105
+ }
106
+ }, GATHERING_TIMEOUT);
94
107
 
95
- const offer = await con.createOffer({offerToReceiveAudio:true, offerToReceiveVideo:true});
96
- await con.setLocalDescription(offer);
97
-
98
- setTimeout(() => {
99
- if (!gatheringComplete) {
100
- debug('didnt finish gathering');
101
- sendOffer();
102
- offerSent = true;
103
- }
104
- }, GATHERING_TIMEOUT);
105
-
106
- peer.handleRtcAnswer = (answer) => {
107
- debug('web handle RtcAnswer', answer.sdp.length);
108
- con.setRemoteDescription(answer);
109
- return 'web handle RtcAnswer ok';
108
+ peer.handleRtcAnswer = async (answer) => {
109
+ debug('web handle RtcAnswer', answer.sdp.length);
110
+ await con.setRemoteDescription(answer);
111
+ return 'web handle RtcAnswer ok';
112
+ };
113
+ } catch (e) {
114
+ debugError('error creating data channel', e);
115
+ reject(e);
110
116
  }
111
117
  });
112
118
  }
@@ -122,9 +128,13 @@ async function answerPeer(peer, offer) {
122
128
  let gatheringComplete = false;
123
129
  const start = Date.now();
124
130
 
125
- function sendAnswer() {
131
+ async function sendAnswer() {
126
132
  const desc = con.localDescription;
127
- peer.methods.rtcSignal({type: desc.type, sdp: desc.sdp});
133
+ try {
134
+ await peer.methods.rtcSignal({type: desc.type, sdp: desc.sdp});
135
+ } catch (e) {
136
+ debugError('error sending answer', e);
137
+ }
128
138
  }
129
139
 
130
140
  con.onicegatheringstatechange = (state) => {
@@ -166,6 +176,7 @@ async function answerPeer(peer, offer) {
166
176
  peer.dcOpen = true;
167
177
  peer.dc = event.channel;
168
178
  peer.rtcSend = (packet) => {
179
+ debug('sending packet', packet.toString(), peer.dc.readyState);
169
180
  peer.dc.send(packet);
170
181
  };
171
182
  peer.rtcEvents.emit('dcOpen', peer.dc);
@@ -174,6 +185,16 @@ async function answerPeer(peer, offer) {
174
185
  };
175
186
  };
176
187
 
188
+ con.ontrack = (event) => {
189
+ debug('rtc track', event);
190
+ peer.rtcEvents.emit('track', event);
191
+ };
192
+
193
+ con.onaddstream = (event) => {
194
+ debug('rtc stream', event);
195
+ peer.rtcEvents.emit('addstream', event);
196
+ };
197
+
177
198
  setTimeout(() => {
178
199
  if (!gatheringComplete) {
179
200
  debug('didnt finish gathering');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hsync",
3
- "version": "0.28.0",
3
+ "version": "0.30.0",
4
4
  "description": "client for hsync-server",
5
5
  "main": "hsync.js",
6
6
  "scripts": {