hsync 0.21.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
@@ -73,12 +73,13 @@ function initPeers(hsyncClient) {
73
73
 
74
74
  peer.localMethods.rtcSignal = (peerInfo, signal) => {
75
75
  debug('rtcSignal', signal.type);
76
- if (signal.type === 'offer' && !peer.rtcCon && !signal.alreadySent) {
76
+ if (signal.type === 'offer') { // && !peer.rtcCon && !signal.alreadySent) {
77
+ peer.rtcStatus = 'connecting';
77
78
  rtc.answerPeer(peer, signal);
78
79
  } else if (signal.type === 'answer') {
79
80
  peer.handleRtcAnswer(signal);
80
81
  }
81
- return 'rtcSignal ok';
82
+ return `rtcSignal ${signal.type} handled ok`;
82
83
  }
83
84
 
84
85
  peer.rtcEvents.on('packet', async (packet) => {
@@ -97,6 +98,13 @@ function initPeers(hsyncClient) {
97
98
  transport.receiveData(rpcMsg);
98
99
  // return;
99
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
+ }
100
108
  } else if (p1 === 'socketData') {
101
109
  handleSocketPacket(msg);
102
110
  } else if (p1 === 'test') {
@@ -110,7 +118,7 @@ function initPeers(hsyncClient) {
110
118
  });
111
119
 
112
120
  peer.rtcEvents.on('dcOpen', () => {
113
- debug('dcOpen');
121
+ debug(peer.answerer ? 'answerer' : 'offerer', 'dcOpen');
114
122
  peer.packAndSend = (topic, payload) => {
115
123
  const packet = createPacket(topic, payload);
116
124
  if (topic === 'test') {
@@ -154,20 +162,35 @@ function initPeers(hsyncClient) {
154
162
 
155
163
  peer.connectRTC = async () => {
156
164
  debug('connectRTC');
165
+ peer.rtcStatus = 'connecting';
166
+ peer.rtcEvents.emit('connecting');
157
167
  return new Promise(async (resolve, reject) => {
158
168
  try {
159
169
  const offer = await rtc.offerPeer(peer);
160
170
  debug('offer', offer);
161
171
  peer.rtcEvents.once('dcOpen', () => {
162
- debug('dcOpen!');
172
+ peer.rtcStatus = 'connected';
173
+ debug('offerer dcOpen!');
163
174
  resolve(offer);
164
175
  });
165
176
  } catch (e) {
166
177
  debug('error connecting to rtc', e);
178
+ peer.rtcStatus = 'error';
167
179
  reject(e);
168
180
  }
169
181
  });
170
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
+ };
171
194
 
172
195
  transport.send = async (msg) => {
173
196
  const fullMsg = {
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.21.0",
3
+ "version": "0.23.0",
4
4
  "description": "client for hsync-server",
5
5
  "main": "hsync.js",
6
6
  "scripts": {