Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .changes/ping-rtt-tracking
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
patch type="fixed" "Add signal RTT tracking via pingReq/pongResp"
19 changes: 17 additions & 2 deletions lib/src/core/signal_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,11 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
Timer? _pingIntervalTimer;

int get pingCount => _pingCount;

int _pingCount = 0;

/// Signal round-trip time in milliseconds, calculated from pingReq/pongResp.
int get rtt => _rtt;
int _rtt = 0;
String? participantSid;

int _requestId = 0;
Expand Down Expand Up @@ -345,6 +348,11 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
_pingCount++;
_resetPingTimeout();
break;
case lk_rtc.SignalResponse_Message.pongResp:
_rtt = DateTime.timestamp().millisecondsSinceEpoch - msg.pongResp.lastPingTimestamp.toInt();
_pingCount++;
_resetPingTimeout();
break;
case lk_rtc.SignalResponse_Message.reconnect:
events.emit(SignalReconnectResponseEvent(response: msg.reconnect));
break;
Expand Down Expand Up @@ -379,7 +387,14 @@ class SignalClient extends Disposable with EventsEmittable<SignalEvent> {
}

void _sendPing() {
_sendRequest(lk_rtc.SignalRequest()..ping = Int64(DateTime.timestamp().millisecondsSinceEpoch));
final now = DateTime.timestamp().millisecondsSinceEpoch;
// Send both ping and pingReq for compatibility with old and new servers
_sendRequest(lk_rtc.SignalRequest()..ping = Int64(now));
_sendRequest(lk_rtc.SignalRequest()
..pingReq = lk_rtc.Ping(
timestamp: Int64(now),
rtt: Int64(_rtt),
));
}

void _startPingInterval() {
Expand Down
Loading