From 1b733ab09c3c1f9192fd0444c6abe446c2224c86 Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Mon, 23 Mar 2026 21:04:46 +0900 Subject: [PATCH 1/4] impl 1 --- lib/src/core/signal_client.dart | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/src/core/signal_client.dart b/lib/src/core/signal_client.dart index 49c39a527..5f62aa06a 100644 --- a/lib/src/core/signal_client.dart +++ b/lib/src/core/signal_client.dart @@ -53,8 +53,11 @@ class SignalClient extends Disposable with EventsEmittable { 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; @@ -345,6 +348,12 @@ class SignalClient extends Disposable with EventsEmittable { _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; @@ -379,7 +388,14 @@ class SignalClient extends Disposable with EventsEmittable { } 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() { From 1439ded1726bd231a6ed5410c1fd4653a0cd71f5 Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Mon, 23 Mar 2026 21:06:01 +0900 Subject: [PATCH 2/4] Create ping-rtt-tracking --- .changes/ping-rtt-tracking | 1 + 1 file changed, 1 insertion(+) create mode 100644 .changes/ping-rtt-tracking diff --git a/.changes/ping-rtt-tracking b/.changes/ping-rtt-tracking new file mode 100644 index 000000000..ecca9dd27 --- /dev/null +++ b/.changes/ping-rtt-tracking @@ -0,0 +1 @@ +patch type="fixed" "Add pingReq/pongResp support with signal RTT tracking" From 39b5201ec04274b3db3c99f0872921689fc09dca Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Mon, 23 Mar 2026 21:12:50 +0900 Subject: [PATCH 3/4] Update ping-rtt-tracking --- .changes/ping-rtt-tracking | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changes/ping-rtt-tracking b/.changes/ping-rtt-tracking index ecca9dd27..d180f4b30 100644 --- a/.changes/ping-rtt-tracking +++ b/.changes/ping-rtt-tracking @@ -1 +1 @@ -patch type="fixed" "Add pingReq/pongResp support with signal RTT tracking" +patch type="fixed" "Add signal RTT tracking via pingReq/pongResp" From 98c63c0c4f2996dff11619666b0efcfec419be91 Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Mon, 23 Mar 2026 21:13:10 +0900 Subject: [PATCH 4/4] fmt --- lib/src/core/signal_client.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/src/core/signal_client.dart b/lib/src/core/signal_client.dart index 5f62aa06a..f579ea13e 100644 --- a/lib/src/core/signal_client.dart +++ b/lib/src/core/signal_client.dart @@ -349,8 +349,7 @@ class SignalClient extends Disposable with EventsEmittable { _resetPingTimeout(); break; case lk_rtc.SignalResponse_Message.pongResp: - _rtt = DateTime.timestamp().millisecondsSinceEpoch - - msg.pongResp.lastPingTimestamp.toInt(); + _rtt = DateTime.timestamp().millisecondsSinceEpoch - msg.pongResp.lastPingTimestamp.toInt(); _pingCount++; _resetPingTimeout(); break;