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/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 'rtcSignal ok';
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
- debug('dcOpen!');
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 request', msg);
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 reply', msg.method, msg.id);
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('node handleRtcAnswer', answer.sdp.length);
107
+ debug('web handle RtcAnswer', answer.sdp.length);
98
108
  con.setRemoteDescription(answer);
99
- return 'web handleRtcAnswer ok';
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hsync",
3
- "version": "0.20.0",
3
+ "version": "0.23.0",
4
4
  "description": "client for hsync-server",
5
5
  "main": "hsync.js",
6
6
  "scripts": {