fix desync & try to fix delay
All checks were successful
Server Build / publish (push) Successful in 29s
Voice Build / publish (push) Successful in 25s

This commit is contained in:
olcxja 2026-08-26 12:17:10 +02:00
commit dc893baf94
5 changed files with 78 additions and 3 deletions

View file

@ -8,6 +8,16 @@ public class Session
public WebSocket Socket { get; }
public Channel<(byte[] Buffer, int Length)> SendQueue { get; }
// Ostatni znak życia (dowolna odebrana ramka - audio, wideo, ping typu 5).
// Klient pinguje co 2 s, więc sesja bez ruchu przez VOICE_IDLE_TIMEOUT to
// martwy polłączony TCP (zabita aplikacja, utracony NAT mapping) - taki wpis
// zamiata task w Program.cs. Bez tego ghost-sesje wiszą w rosterze wiecznie
// (/room/users zwraca nieżyjących uczestników -> ghost kafelki u innych,
// a relay marnuje bandwidth na zamknięte sockety).
private long _lastSeenUtcTicks;
public DateTime LastSeenUtc => new(Interlocked.Read(ref _lastSeenUtcTicks), DateTimeKind.Utc);
public Session(WebSocket socket)
{
Socket = socket;
@ -15,5 +25,8 @@ public class Session
{
FullMode = BoundedChannelFullMode.Wait
});
_lastSeenUtcTicks = DateTime.UtcNow.Ticks;
}
}
public void Touch() => Interlocked.Exchange(ref _lastSeenUtcTicks, DateTime.UtcNow.Ticks);
}