node-datachannel 0.1.13 → 0.2.1
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/CMakeLists.txt +16 -4
- package/README.md +214 -64
- package/examples/README.md +2 -2
- package/examples/media/README.md +22 -0
- package/examples/media/main.html +45 -0
- package/examples/media/media.js +55 -0
- package/lib/index.d.ts +96 -1
- package/package.json +21 -7
- package/src/data-channel-wrapper.cpp +85 -101
- package/src/data-channel-wrapper.h +18 -11
- package/src/main.cpp +8 -0
- package/src/media-audio-wrapper.cpp +457 -0
- package/src/media-audio-wrapper.h +54 -0
- package/src/media-direction.cpp +43 -0
- package/src/media-direction.h +10 -0
- package/src/media-rtcpreceivingsession-wrapper.cpp +63 -0
- package/src/media-rtcpreceivingsession-wrapper.h +36 -0
- package/src/media-track-wrapper.cpp +333 -0
- package/src/media-track-wrapper.h +58 -0
- package/src/media-video-wrapper.cpp +490 -0
- package/src/media-video-wrapper.h +56 -0
- package/src/peer-connection-wrapper.cpp +218 -50
- package/src/peer-connection-wrapper.h +25 -9
- package/src/rtc-wrapper.cpp +13 -1
- package/src/rtc-wrapper.h +3 -1
- package/src/thread-safe-callback.cpp +69 -0
- package/src/thread-safe-callback.h +57 -0
- package/test/connectivity.js +2 -1
- package/test/test.js +111 -112
package/test/test.js
CHANGED
|
@@ -35,115 +35,114 @@ describe('PeerConnection Classes', () => {
|
|
|
35
35
|
});
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
//
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
//
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
//
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
//
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
// });
|
|
38
|
+
describe('P2P', () => {
|
|
39
|
+
// Default is 5000 ms but we need more
|
|
40
|
+
jest.setTimeout(30000);
|
|
41
|
+
|
|
42
|
+
let peer1 = new nodeDataChannel.PeerConnection("Peer1", { iceServers: ["stun:stun.l.google.com:19302"] });
|
|
43
|
+
let peer2 = new nodeDataChannel.PeerConnection("Peer2", { iceServers: ["stun:stun.l.google.com:19302"] });
|
|
44
|
+
let dc1 = null;
|
|
45
|
+
let dc2 = null;
|
|
46
|
+
|
|
47
|
+
// Mocks
|
|
48
|
+
const p1StateMock = jest.fn();
|
|
49
|
+
const p1GatheringStateMock = jest.fn();
|
|
50
|
+
const p2StateMock = jest.fn();
|
|
51
|
+
const p2GatheringStateMock = jest.fn();
|
|
52
|
+
const p1SDPMock = jest.fn();
|
|
53
|
+
const p1CandidateMock = jest.fn();
|
|
54
|
+
const p2SDPMock = jest.fn();
|
|
55
|
+
const p2CandidateMock = jest.fn();
|
|
56
|
+
|
|
57
|
+
const p1DCMock = jest.fn();
|
|
58
|
+
const p1DCMessageMock = jest.fn();
|
|
59
|
+
const p2DCMock = jest.fn();
|
|
60
|
+
const p2DCMessageMock = jest.fn();
|
|
61
|
+
|
|
62
|
+
// Set Callbacks
|
|
63
|
+
peer1.onStateChange(p1StateMock);
|
|
64
|
+
peer1.onGatheringStateChange(p1GatheringStateMock);
|
|
65
|
+
peer1.onLocalDescription((sdp, type) => {
|
|
66
|
+
p1SDPMock();
|
|
67
|
+
peer2.setRemoteDescription(sdp, type);
|
|
68
|
+
});
|
|
69
|
+
peer1.onLocalCandidate((candidate, mid) => {
|
|
70
|
+
p1CandidateMock();
|
|
71
|
+
peer2.addRemoteCandidate(candidate, mid);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// Set Callbacks
|
|
75
|
+
peer2.onStateChange(p2StateMock);
|
|
76
|
+
peer2.onGatheringStateChange(p2GatheringStateMock);
|
|
77
|
+
peer2.onLocalDescription((sdp, type) => {
|
|
78
|
+
p2SDPMock();
|
|
79
|
+
peer1.setRemoteDescription(sdp, type);
|
|
80
|
+
});
|
|
81
|
+
peer2.onLocalCandidate((candidate, mid) => {
|
|
82
|
+
p2CandidateMock();
|
|
83
|
+
peer1.addRemoteCandidate(candidate, mid);
|
|
84
|
+
});
|
|
85
|
+
peer2.onDataChannel((dc) => {
|
|
86
|
+
p2DCMock();
|
|
87
|
+
dc2 = dc;
|
|
88
|
+
dc2.onMessage((msg) => {
|
|
89
|
+
p2DCMessageMock(msg);
|
|
90
|
+
});
|
|
91
|
+
dc2.sendMessage("Hello From Peer2");
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
dc1 = peer1.createDataChannel("test-p2p");
|
|
95
|
+
dc1.onOpen(() => {
|
|
96
|
+
p1DCMock();
|
|
97
|
+
dc1.sendMessage("Hello From Peer1");
|
|
98
|
+
});
|
|
99
|
+
dc1.onMessage((msg) => {
|
|
100
|
+
p1DCMessageMock(msg);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
test('P2P', (done) => {
|
|
104
|
+
setTimeout(() => {
|
|
105
|
+
dc1.close();
|
|
106
|
+
dc2.close();
|
|
107
|
+
peer1.close();
|
|
108
|
+
peer2.close();
|
|
109
|
+
|
|
110
|
+
// Fee memory
|
|
111
|
+
dc1 = null;
|
|
112
|
+
dc2 = null;
|
|
113
|
+
peer1 = null;
|
|
114
|
+
peer2 = null;
|
|
115
|
+
|
|
116
|
+
// Cleanup Threads
|
|
117
|
+
nodeDataChannel.cleanup();
|
|
118
|
+
}, 10 * 1000);
|
|
119
|
+
|
|
120
|
+
setTimeout(() => {
|
|
121
|
+
// State Callbacks
|
|
122
|
+
expect(p1StateMock.mock.calls.length).toBeGreaterThanOrEqual(1);
|
|
123
|
+
expect(p1GatheringStateMock.mock.calls.length).toBeGreaterThanOrEqual(1);
|
|
124
|
+
expect(p2StateMock.mock.calls.length).toBeGreaterThanOrEqual(1);
|
|
125
|
+
expect(p2GatheringStateMock.mock.calls.length).toBeGreaterThanOrEqual(1);
|
|
126
|
+
|
|
127
|
+
// SDP
|
|
128
|
+
expect(p1SDPMock.mock.calls.length).toBe(1);
|
|
129
|
+
expect(p2SDPMock.mock.calls.length).toBe(1);
|
|
130
|
+
|
|
131
|
+
// Candidates
|
|
132
|
+
expect(p1CandidateMock.mock.calls.length).toBeGreaterThanOrEqual(1);
|
|
133
|
+
expect(p2CandidateMock.mock.calls.length).toBeGreaterThanOrEqual(1);
|
|
134
|
+
|
|
135
|
+
// DataChannel
|
|
136
|
+
expect(p1DCMock.mock.calls.length).toBe(1);
|
|
137
|
+
expect(p1DCMessageMock.mock.calls.length).toBe(1);
|
|
138
|
+
expect(p1DCMessageMock.mock.calls[0][0]).toEqual("Hello From Peer2");
|
|
139
|
+
expect(p2DCMock.mock.calls.length).toBe(1);
|
|
140
|
+
|
|
141
|
+
expect(p2DCMessageMock.mock.calls.length).toBe(1);
|
|
142
|
+
expect(p2DCMessageMock.mock.calls[0][0]).toEqual("Hello From Peer1");
|
|
143
|
+
|
|
144
|
+
done();
|
|
145
|
+
}, 12 * 1000);
|
|
146
|
+
|
|
147
|
+
});
|
|
148
|
+
});
|