mediasoup-client 3.6.59 → 3.6.60
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 +17 -3
- package/lib/Consumer.d.ts +3 -3
- package/lib/Consumer.d.ts.map +1 -1
- package/lib/DataConsumer.d.ts +3 -3
- package/lib/DataConsumer.d.ts.map +1 -1
- package/lib/DataProducer.d.ts +3 -3
- package/lib/DataProducer.d.ts.map +1 -1
- package/lib/Device.d.ts +3 -3
- package/lib/Device.d.ts.map +1 -1
- package/lib/EnhancedEventEmitter.d.ts +1 -1
- package/lib/EnhancedEventEmitter.d.ts.map +1 -1
- package/lib/Producer.d.ts +4 -4
- package/lib/Producer.d.ts.map +1 -1
- package/lib/RtpParameters.d.ts +11 -11
- package/lib/RtpParameters.d.ts.map +1 -1
- package/lib/SctpParameters.d.ts +4 -4
- package/lib/SctpParameters.d.ts.map +1 -1
- package/lib/Transport.d.ts +11 -11
- package/lib/Transport.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +6 -6
- package/lib/handlers/Chrome67.js +6 -6
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +10 -7
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +10 -7
- package/lib/handlers/Edge11.js +6 -6
- package/lib/handlers/FakeHandler.d.ts +1 -1
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +6 -6
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +10 -7
- package/lib/handlers/HandlerInterface.d.ts +11 -11
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/ReactNative.js +6 -6
- package/lib/handlers/Safari11.js +6 -6
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +10 -7
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/scalabilityModes.d.ts +1 -1
- package/lib/scalabilityModes.d.ts.map +1 -1
- package/npm-scripts.js +124 -28
- package/package.json +17 -5
- package/.eslintrc.js +0 -243
- package/.github/FUNDING.yml +0 -12
- package/.github/ISSUE_TEMPLATE/Bug_Report.md +0 -24
- package/.github/ISSUE_TEMPLATE/Feature_Request.md +0 -7
- package/.github/ISSUE_TEMPLATE/Support_Question.md +0 -12
- package/.travis.yml +0 -26
- package/src/Consumer.ts +0 -334
- package/src/DataConsumer.ts +0 -271
- package/src/DataProducer.ts +0 -291
- package/src/Device.ts +0 -584
- package/src/EnhancedEventEmitter.ts +0 -133
- package/src/Logger.ts +0 -47
- package/src/Producer.ts +0 -534
- package/src/RtpParameters.ts +0 -326
- package/src/SctpParameters.ts +0 -74
- package/src/Transport.ts +0 -1275
- package/src/errors.ts +0 -45
- package/src/handlers/Chrome55.ts +0 -866
- package/src/handlers/Chrome67.ts +0 -951
- package/src/handlers/Chrome70.ts +0 -964
- package/src/handlers/Chrome74.ts +0 -1058
- package/src/handlers/Edge11.ts +0 -667
- package/src/handlers/FakeHandler.ts +0 -448
- package/src/handlers/Firefox60.ts +0 -1040
- package/src/handlers/HandlerInterface.ts +0 -162
- package/src/handlers/ReactNative.ts +0 -886
- package/src/handlers/Safari11.ts +0 -944
- package/src/handlers/Safari12.ts +0 -1009
- package/src/handlers/ortc/edgeUtils.ts +0 -77
- package/src/handlers/sdp/MediaSection.ts +0 -836
- package/src/handlers/sdp/RemoteSdp.ts +0 -474
- package/src/handlers/sdp/commonUtils.ts +0 -259
- package/src/handlers/sdp/plainRtpUtils.ts +0 -58
- package/src/handlers/sdp/planBUtils.ts +0 -227
- package/src/handlers/sdp/unifiedPlanUtils.ts +0 -188
- package/src/index.ts +0 -28
- package/src/ortc.ts +0 -1169
- package/src/scalabilityModes.ts +0 -27
- package/src/types.ts +0 -11
- package/src/utils.ts +0 -18
- package/test/fakeParameters.js +0 -701
- package/test/test.js +0 -1672
- package/tsconfig.json +0 -17
package/src/DataConsumer.ts
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
import { Logger } from './Logger';
|
|
2
|
-
import { EnhancedEventEmitter } from './EnhancedEventEmitter';
|
|
3
|
-
import { SctpStreamParameters } from './SctpParameters';
|
|
4
|
-
|
|
5
|
-
const logger = new Logger('DataConsumer');
|
|
6
|
-
|
|
7
|
-
export type DataConsumerOptions =
|
|
8
|
-
{
|
|
9
|
-
id?: string;
|
|
10
|
-
dataProducerId?: string;
|
|
11
|
-
sctpStreamParameters: SctpStreamParameters;
|
|
12
|
-
label?: string;
|
|
13
|
-
protocol?: string;
|
|
14
|
-
appData?: Record<string, unknown>;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export type DataConsumerEvents =
|
|
18
|
-
{
|
|
19
|
-
transportclose: [];
|
|
20
|
-
open: [];
|
|
21
|
-
error: [Error];
|
|
22
|
-
close: [];
|
|
23
|
-
message: [any];
|
|
24
|
-
// Private events.
|
|
25
|
-
'@close': [];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type DataConsumerObserverEvents =
|
|
29
|
-
{
|
|
30
|
-
close: [];
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export class DataConsumer extends EnhancedEventEmitter<DataConsumerEvents>
|
|
34
|
-
{
|
|
35
|
-
// Id.
|
|
36
|
-
private readonly _id: string;
|
|
37
|
-
// Associated DataProducer Id.
|
|
38
|
-
private readonly _dataProducerId: string;
|
|
39
|
-
// The underlying RTCDataChannel instance.
|
|
40
|
-
private readonly _dataChannel: RTCDataChannel;
|
|
41
|
-
// Closed flag.
|
|
42
|
-
private _closed = false;
|
|
43
|
-
// SCTP stream parameters.
|
|
44
|
-
private readonly _sctpStreamParameters: SctpStreamParameters;
|
|
45
|
-
// App custom data.
|
|
46
|
-
private readonly _appData: Record<string, unknown>;
|
|
47
|
-
// Observer instance.
|
|
48
|
-
protected readonly _observer = new EnhancedEventEmitter<DataConsumerObserverEvents>();
|
|
49
|
-
|
|
50
|
-
constructor(
|
|
51
|
-
{
|
|
52
|
-
id,
|
|
53
|
-
dataProducerId,
|
|
54
|
-
dataChannel,
|
|
55
|
-
sctpStreamParameters,
|
|
56
|
-
appData
|
|
57
|
-
}:
|
|
58
|
-
{
|
|
59
|
-
id: string;
|
|
60
|
-
dataProducerId: string;
|
|
61
|
-
dataChannel: RTCDataChannel;
|
|
62
|
-
sctpStreamParameters: SctpStreamParameters;
|
|
63
|
-
appData?: Record<string, unknown>;
|
|
64
|
-
}
|
|
65
|
-
)
|
|
66
|
-
{
|
|
67
|
-
super();
|
|
68
|
-
|
|
69
|
-
logger.debug('constructor()');
|
|
70
|
-
|
|
71
|
-
this._id = id;
|
|
72
|
-
this._dataProducerId = dataProducerId;
|
|
73
|
-
this._dataChannel = dataChannel;
|
|
74
|
-
this._sctpStreamParameters = sctpStreamParameters;
|
|
75
|
-
this._appData = appData || {};
|
|
76
|
-
|
|
77
|
-
this._handleDataChannel();
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* DataConsumer id.
|
|
82
|
-
*/
|
|
83
|
-
get id(): string
|
|
84
|
-
{
|
|
85
|
-
return this._id;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Associated DataProducer id.
|
|
90
|
-
*/
|
|
91
|
-
get dataProducerId(): string
|
|
92
|
-
{
|
|
93
|
-
return this._dataProducerId;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Whether the DataConsumer is closed.
|
|
98
|
-
*/
|
|
99
|
-
get closed(): boolean
|
|
100
|
-
{
|
|
101
|
-
return this._closed;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* SCTP stream parameters.
|
|
106
|
-
*/
|
|
107
|
-
get sctpStreamParameters(): SctpStreamParameters
|
|
108
|
-
{
|
|
109
|
-
return this._sctpStreamParameters;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* DataChannel readyState.
|
|
114
|
-
*/
|
|
115
|
-
get readyState(): RTCDataChannelState
|
|
116
|
-
{
|
|
117
|
-
return this._dataChannel.readyState;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* DataChannel label.
|
|
122
|
-
*/
|
|
123
|
-
get label(): string
|
|
124
|
-
{
|
|
125
|
-
return this._dataChannel.label;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* DataChannel protocol.
|
|
130
|
-
*/
|
|
131
|
-
get protocol(): string
|
|
132
|
-
{
|
|
133
|
-
return this._dataChannel.protocol;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* DataChannel binaryType.
|
|
138
|
-
*/
|
|
139
|
-
get binaryType(): BinaryType
|
|
140
|
-
{
|
|
141
|
-
return this._dataChannel.binaryType;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Set DataChannel binaryType.
|
|
146
|
-
*/
|
|
147
|
-
set binaryType(binaryType: BinaryType)
|
|
148
|
-
{
|
|
149
|
-
this._dataChannel.binaryType = binaryType;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* App custom data.
|
|
154
|
-
*/
|
|
155
|
-
get appData(): Record<string, unknown>
|
|
156
|
-
{
|
|
157
|
-
return this._appData;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Invalid setter.
|
|
162
|
-
*/
|
|
163
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
164
|
-
set appData(appData: Record<string, unknown>)
|
|
165
|
-
{
|
|
166
|
-
throw new Error('cannot override appData object');
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
get observer(): EnhancedEventEmitter
|
|
170
|
-
{
|
|
171
|
-
return this._observer;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Closes the DataConsumer.
|
|
176
|
-
*/
|
|
177
|
-
close(): void
|
|
178
|
-
{
|
|
179
|
-
if (this._closed)
|
|
180
|
-
return;
|
|
181
|
-
|
|
182
|
-
logger.debug('close()');
|
|
183
|
-
|
|
184
|
-
this._closed = true;
|
|
185
|
-
|
|
186
|
-
this._dataChannel.close();
|
|
187
|
-
|
|
188
|
-
this.emit('@close');
|
|
189
|
-
|
|
190
|
-
// Emit observer event.
|
|
191
|
-
this._observer.safeEmit('close');
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Transport was closed.
|
|
196
|
-
*/
|
|
197
|
-
transportClosed(): void
|
|
198
|
-
{
|
|
199
|
-
if (this._closed)
|
|
200
|
-
return;
|
|
201
|
-
|
|
202
|
-
logger.debug('transportClosed()');
|
|
203
|
-
|
|
204
|
-
this._closed = true;
|
|
205
|
-
|
|
206
|
-
this._dataChannel.close();
|
|
207
|
-
|
|
208
|
-
this.safeEmit('transportclose');
|
|
209
|
-
|
|
210
|
-
// Emit observer event.
|
|
211
|
-
this._observer.safeEmit('close');
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
private _handleDataChannel(): void
|
|
215
|
-
{
|
|
216
|
-
this._dataChannel.addEventListener('open', () =>
|
|
217
|
-
{
|
|
218
|
-
if (this._closed)
|
|
219
|
-
return;
|
|
220
|
-
|
|
221
|
-
logger.debug('DataChannel "open" event');
|
|
222
|
-
|
|
223
|
-
this.safeEmit('open');
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
this._dataChannel.addEventListener('error', (event: any) =>
|
|
227
|
-
{
|
|
228
|
-
if (this._closed)
|
|
229
|
-
return;
|
|
230
|
-
|
|
231
|
-
let { error } = event;
|
|
232
|
-
|
|
233
|
-
if (!error)
|
|
234
|
-
error = new Error('unknown DataChannel error');
|
|
235
|
-
|
|
236
|
-
if (error.errorDetail === 'sctp-failure')
|
|
237
|
-
{
|
|
238
|
-
logger.error(
|
|
239
|
-
'DataChannel SCTP error [sctpCauseCode:%s]: %s',
|
|
240
|
-
error.sctpCauseCode, error.message);
|
|
241
|
-
}
|
|
242
|
-
else
|
|
243
|
-
{
|
|
244
|
-
logger.error('DataChannel "error" event: %o', error);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
this.safeEmit('error', error);
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
this._dataChannel.addEventListener('close', () =>
|
|
251
|
-
{
|
|
252
|
-
if (this._closed)
|
|
253
|
-
return;
|
|
254
|
-
|
|
255
|
-
logger.warn('DataChannel "close" event');
|
|
256
|
-
|
|
257
|
-
this._closed = true;
|
|
258
|
-
|
|
259
|
-
this.emit('@close');
|
|
260
|
-
this.safeEmit('close');
|
|
261
|
-
});
|
|
262
|
-
|
|
263
|
-
this._dataChannel.addEventListener('message', (event: any) =>
|
|
264
|
-
{
|
|
265
|
-
if (this._closed)
|
|
266
|
-
return;
|
|
267
|
-
|
|
268
|
-
this.safeEmit('message', event.data);
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
}
|
package/src/DataProducer.ts
DELETED
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
import { Logger } from './Logger';
|
|
2
|
-
import { EnhancedEventEmitter } from './EnhancedEventEmitter';
|
|
3
|
-
import { InvalidStateError } from './errors';
|
|
4
|
-
import { SctpStreamParameters } from './SctpParameters';
|
|
5
|
-
|
|
6
|
-
const logger = new Logger('DataProducer');
|
|
7
|
-
|
|
8
|
-
export type DataProducerOptions =
|
|
9
|
-
{
|
|
10
|
-
ordered?: boolean;
|
|
11
|
-
maxPacketLifeTime?: number;
|
|
12
|
-
maxRetransmits?: number;
|
|
13
|
-
label?: string;
|
|
14
|
-
protocol?: string;
|
|
15
|
-
appData?: Record<string, unknown>;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export type DataProducerEvents =
|
|
19
|
-
{
|
|
20
|
-
transportclose: [];
|
|
21
|
-
open: [];
|
|
22
|
-
error: [Error];
|
|
23
|
-
close: [];
|
|
24
|
-
bufferedamountlow: [];
|
|
25
|
-
// Private events.
|
|
26
|
-
'@close': [];
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export type DataProducerObserverEvents =
|
|
30
|
-
{
|
|
31
|
-
close: [];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export class DataProducer extends EnhancedEventEmitter<DataProducerEvents>
|
|
35
|
-
{
|
|
36
|
-
// Id.
|
|
37
|
-
private readonly _id: string;
|
|
38
|
-
// The underlying RTCDataChannel instance.
|
|
39
|
-
private readonly _dataChannel: RTCDataChannel;
|
|
40
|
-
// Closed flag.
|
|
41
|
-
private _closed = false;
|
|
42
|
-
// SCTP stream parameters.
|
|
43
|
-
private readonly _sctpStreamParameters: SctpStreamParameters;
|
|
44
|
-
// App custom data.
|
|
45
|
-
private readonly _appData: Record<string, unknown>;
|
|
46
|
-
// Observer instance.
|
|
47
|
-
protected readonly _observer = new EnhancedEventEmitter<DataProducerObserverEvents>();
|
|
48
|
-
|
|
49
|
-
constructor(
|
|
50
|
-
{
|
|
51
|
-
id,
|
|
52
|
-
dataChannel,
|
|
53
|
-
sctpStreamParameters,
|
|
54
|
-
appData
|
|
55
|
-
}:
|
|
56
|
-
{
|
|
57
|
-
id: string;
|
|
58
|
-
dataChannel: RTCDataChannel;
|
|
59
|
-
sctpStreamParameters: SctpStreamParameters;
|
|
60
|
-
appData?: Record<string, unknown>;
|
|
61
|
-
}
|
|
62
|
-
)
|
|
63
|
-
{
|
|
64
|
-
super();
|
|
65
|
-
|
|
66
|
-
logger.debug('constructor()');
|
|
67
|
-
|
|
68
|
-
this._id = id;
|
|
69
|
-
this._dataChannel = dataChannel;
|
|
70
|
-
this._sctpStreamParameters = sctpStreamParameters;
|
|
71
|
-
this._appData = appData || {};
|
|
72
|
-
|
|
73
|
-
this._handleDataChannel();
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* DataProducer id.
|
|
78
|
-
*/
|
|
79
|
-
get id(): string
|
|
80
|
-
{
|
|
81
|
-
return this._id;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Whether the DataProducer is closed.
|
|
86
|
-
*/
|
|
87
|
-
get closed(): boolean
|
|
88
|
-
{
|
|
89
|
-
return this._closed;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* SCTP stream parameters.
|
|
94
|
-
*/
|
|
95
|
-
get sctpStreamParameters(): SctpStreamParameters
|
|
96
|
-
{
|
|
97
|
-
return this._sctpStreamParameters;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* DataChannel readyState.
|
|
102
|
-
*/
|
|
103
|
-
get readyState(): RTCDataChannelState
|
|
104
|
-
{
|
|
105
|
-
return this._dataChannel.readyState;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* DataChannel label.
|
|
110
|
-
*/
|
|
111
|
-
get label(): string
|
|
112
|
-
{
|
|
113
|
-
return this._dataChannel.label;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* DataChannel protocol.
|
|
118
|
-
*/
|
|
119
|
-
get protocol(): string
|
|
120
|
-
{
|
|
121
|
-
return this._dataChannel.protocol;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* DataChannel bufferedAmount.
|
|
126
|
-
*/
|
|
127
|
-
get bufferedAmount(): number
|
|
128
|
-
{
|
|
129
|
-
return this._dataChannel.bufferedAmount;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* DataChannel bufferedAmountLowThreshold.
|
|
134
|
-
*/
|
|
135
|
-
get bufferedAmountLowThreshold(): number
|
|
136
|
-
{
|
|
137
|
-
return this._dataChannel.bufferedAmountLowThreshold;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Set DataChannel bufferedAmountLowThreshold.
|
|
142
|
-
*/
|
|
143
|
-
set bufferedAmountLowThreshold(bufferedAmountLowThreshold: number)
|
|
144
|
-
{
|
|
145
|
-
this._dataChannel.bufferedAmountLowThreshold = bufferedAmountLowThreshold;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* App custom data.
|
|
150
|
-
*/
|
|
151
|
-
get appData(): Record<string, unknown>
|
|
152
|
-
{
|
|
153
|
-
return this._appData;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Invalid setter.
|
|
158
|
-
*/
|
|
159
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
160
|
-
set appData(appData: Record<string, unknown>)
|
|
161
|
-
{
|
|
162
|
-
throw new Error('cannot override appData object');
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
get observer(): EnhancedEventEmitter
|
|
166
|
-
{
|
|
167
|
-
return this._observer;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Closes the DataProducer.
|
|
172
|
-
*/
|
|
173
|
-
close(): void
|
|
174
|
-
{
|
|
175
|
-
if (this._closed)
|
|
176
|
-
return;
|
|
177
|
-
|
|
178
|
-
logger.debug('close()');
|
|
179
|
-
|
|
180
|
-
this._closed = true;
|
|
181
|
-
|
|
182
|
-
this._dataChannel.close();
|
|
183
|
-
|
|
184
|
-
this.emit('@close');
|
|
185
|
-
|
|
186
|
-
// Emit observer event.
|
|
187
|
-
this._observer.safeEmit('close');
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Transport was closed.
|
|
192
|
-
*/
|
|
193
|
-
transportClosed(): void
|
|
194
|
-
{
|
|
195
|
-
if (this._closed)
|
|
196
|
-
return;
|
|
197
|
-
|
|
198
|
-
logger.debug('transportClosed()');
|
|
199
|
-
|
|
200
|
-
this._closed = true;
|
|
201
|
-
|
|
202
|
-
this._dataChannel.close();
|
|
203
|
-
|
|
204
|
-
this.safeEmit('transportclose');
|
|
205
|
-
|
|
206
|
-
// Emit observer event.
|
|
207
|
-
this._observer.safeEmit('close');
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Send a message.
|
|
212
|
-
*
|
|
213
|
-
* @param {String|Blob|ArrayBuffer|ArrayBufferView} data.
|
|
214
|
-
*/
|
|
215
|
-
send(data: any): void
|
|
216
|
-
{
|
|
217
|
-
logger.debug('send()');
|
|
218
|
-
|
|
219
|
-
if (this._closed)
|
|
220
|
-
throw new InvalidStateError('closed');
|
|
221
|
-
|
|
222
|
-
this._dataChannel.send(data);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
private _handleDataChannel(): void
|
|
226
|
-
{
|
|
227
|
-
this._dataChannel.addEventListener('open', () =>
|
|
228
|
-
{
|
|
229
|
-
if (this._closed)
|
|
230
|
-
return;
|
|
231
|
-
|
|
232
|
-
logger.debug('DataChannel "open" event');
|
|
233
|
-
|
|
234
|
-
this.safeEmit('open');
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
this._dataChannel.addEventListener('error', (event: any) =>
|
|
238
|
-
{
|
|
239
|
-
if (this._closed)
|
|
240
|
-
return;
|
|
241
|
-
|
|
242
|
-
let { error } = event;
|
|
243
|
-
|
|
244
|
-
if (!error)
|
|
245
|
-
error = new Error('unknown DataChannel error');
|
|
246
|
-
|
|
247
|
-
if (error.errorDetail === 'sctp-failure')
|
|
248
|
-
{
|
|
249
|
-
logger.error(
|
|
250
|
-
'DataChannel SCTP error [sctpCauseCode:%s]: %s',
|
|
251
|
-
error.sctpCauseCode, error.message);
|
|
252
|
-
}
|
|
253
|
-
else
|
|
254
|
-
{
|
|
255
|
-
logger.error('DataChannel "error" event: %o', error);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
this.safeEmit('error', error);
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
this._dataChannel.addEventListener('close', () =>
|
|
262
|
-
{
|
|
263
|
-
if (this._closed)
|
|
264
|
-
return;
|
|
265
|
-
|
|
266
|
-
logger.warn('DataChannel "close" event');
|
|
267
|
-
|
|
268
|
-
this._closed = true;
|
|
269
|
-
|
|
270
|
-
this.emit('@close');
|
|
271
|
-
this.safeEmit('close');
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
this._dataChannel.addEventListener('message', () =>
|
|
275
|
-
{
|
|
276
|
-
if (this._closed)
|
|
277
|
-
return;
|
|
278
|
-
|
|
279
|
-
logger.warn(
|
|
280
|
-
'DataChannel "message" event in a DataProducer, message discarded');
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
this._dataChannel.addEventListener('bufferedamountlow', () =>
|
|
284
|
-
{
|
|
285
|
-
if (this._closed)
|
|
286
|
-
return;
|
|
287
|
-
|
|
288
|
-
this.safeEmit('bufferedamountlow');
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
}
|