data channel state logging
This commit is contained in:
+31
-8
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user