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