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/Readme.md +1 -1
- package/connection.js +33 -13
- package/dist/hsync.js +3 -3
- package/dist/hsync.min.js +1 -1
- package/lib/peers.js +27 -4
- package/lib/rtc-node.js +17 -14
- package/lib/rtc-web.js +15 -4
- package/package.json +1 -1
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
|
|
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
|
-
|
|
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('
|
|
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);
|