data channel state logging

This commit is contained in:
Hiroshi Horie
2021-12-13 12:01:02 +07:00
parent d79e1f340c
commit 3384bc6c6e
+31 -8
View File
@@ -45,6 +45,10 @@ class RTCEngine extends Disposable with EventsEmittable<EngineEvent> {
// data channels for packets
rtc.RTCDataChannel? _reliableDC;
rtc.RTCDataChannel? _lossyDC;
rtc.RTCDataChannelState get reliableDataChannelState =>
_reliableDC?.state ?? rtc.RTCDataChannelState.RTCDataChannelClosed;
rtc.RTCDataChannelState get lossyDataChannelState =>
_lossyDC?.state ?? rtc.RTCDataChannelState.RTCDataChannelClosed;
bool _iceConnected = false;
ConnectionState _connectionState = ConnectionState.disconnected;
@@ -185,17 +189,21 @@ class RTCEngine extends Disposable with EventsEmittable<EngineEvent> {
// make sure we do have a data connection
await _ensurePublisherConnected();
final dcMessage =
// construct the data channel message
final message =
rtc.RTCDataChannelMessage.fromBinary(packet.writeToBuffer());
if (packet.kind == lk_models.DataPacket_Kind.LOSSY && _lossyDC != null) {
logger.fine('Sending lossy data...');
await _lossyDC?.send(dcMessage);
} else if (packet.kind == lk_models.DataPacket_Kind.RELIABLE &&
_reliableDC != null) {
logger.fine('Sending reliable data...');
await _reliableDC?.send(dcMessage);
// chose data channel
final rtc.RTCDataChannel? channel =
packet.kind == lk_models.DataPacket_Kind.LOSSY ? _lossyDC : _reliableDC;
// send if channel exists
if (channel == null) {
throw UnexpectedStateException('Data channel is not ready');
}
logger.fine('sendDataPacket(label:${channel.label})');
await channel.send(message);
}
Future<void> _ensurePublisherConnected() async {
@@ -405,6 +413,8 @@ class RTCEngine extends Disposable with EventsEmittable<EngineEvent> {
_lossyDC =
await publisher?.pc.createDataChannel(_lossyDCLabel, lossyInit);
_lossyDC?.onMessage = _onDCMessage;
_lossyDC?.stateChangeStream
.listen((state) => _onDCStateUpdated(Reliability.lossy, state));
} catch (_) {
logger.severe('[$objectId] createDataChannel() did throw $_');
}
@@ -416,6 +426,8 @@ class RTCEngine extends Disposable with EventsEmittable<EngineEvent> {
_reliableDC =
await publisher?.pc.createDataChannel(_reliableDCLabel, reliableInit);
_reliableDC?.onMessage = _onDCMessage;
_reliableDC?.stateChangeStream
.listen((state) => _onDCStateUpdated(Reliability.reliable, state));
} catch (_) {
logger.severe('[$objectId] createDataChannel() did throw $_');
}
@@ -427,11 +439,15 @@ class RTCEngine extends Disposable with EventsEmittable<EngineEvent> {
logger.fine('Server opened DC label: ${dc.label}');
_reliableDC = dc;
_reliableDC?.onMessage = _onDCMessage;
_reliableDC?.stateChangeStream
.listen((state) => _onDCStateUpdated(Reliability.reliable, state));
break;
case _lossyDCLabel:
logger.fine('Server opened DC label: ${dc.label}');
_lossyDC = dc;
_lossyDC?.onMessage = _onDCMessage;
_lossyDC?.stateChangeStream
.listen((event) => _onDCStateUpdated(Reliability.lossy, event));
break;
default:
logger.warning('Unknown DC label: ${dc.label}');
@@ -439,6 +455,13 @@ class RTCEngine extends Disposable with EventsEmittable<EngineEvent> {
}
}
void _onDCStateUpdated(
Reliability channel,
rtc.RTCDataChannelState state,
) {
logger.fine('Data channel state updated ${channel} ${state}');
}
void _onDCMessage(rtc.RTCDataChannelMessage message) {
// always expect binary
if (!message.isBinary) {