Skip to content

Commit 29556b6

Browse files
committed
Add video server disconnection callback
1 parent 0041c21 commit 29556b6

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

Packages/StreamVideo/Runtime/Core/LowLevelClient/RtcSession.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ internal sealed class RtcSession : IMediaInputProvider, IDisposable
8585
public event Action PublisherAudioTrackChanged;
8686
public event Action PublisherVideoTrackChanged;
8787

88+
public event Action PeerConnectionDisconnectedDuringSession;
8889

8990
public bool PublisherAudioTrackIsEnabled
9091
{
@@ -1098,6 +1099,8 @@ private void OnSfuTrackUnpublished(TrackUnpublished trackUnpublished)
10981099
var sessionId = trackUnpublished.SessionId;
10991100
var type = trackUnpublished.Type.ToPublicEnum();
11001101
var cause = trackUnpublished.Cause;
1102+
1103+
// StreamTODO: test if this works well with other user muting this user
11011104
var updateLocalParticipantState = cause != TrackUnpublishReason.Unspecified && cause != TrackUnpublishReason.UserMuted;
11021105

11031106
// Optionally available. Read TrackUnpublished.participant comment in events.proto
@@ -1850,6 +1853,7 @@ private void CreatePublisher(IEnumerable<ICEServer> iceServers)
18501853
Publisher.NegotiationNeeded += OnPublisherNegotiationNeeded;
18511854
Publisher.PublisherAudioTrackChanged += OnPublisherAudioTrackChanged;
18521855
Publisher.PublisherVideoTrackChanged += OnPublisherVideoTrackChanged;
1856+
Publisher.Disconnected += PublisherOnDisconnected;
18531857

18541858
Publisher.InitPublisherTracks();
18551859

@@ -1865,6 +1869,7 @@ private void DisposePublisher()
18651869
Publisher.NegotiationNeeded -= OnPublisherNegotiationNeeded;
18661870
Publisher.PublisherAudioTrackChanged -= OnPublisherAudioTrackChanged;
18671871
Publisher.PublisherVideoTrackChanged -= OnPublisherVideoTrackChanged;
1872+
Publisher.Disconnected += PublisherOnDisconnected;
18681873
Publisher.Dispose();
18691874
Publisher = null;
18701875
}
@@ -1880,6 +1885,14 @@ private void OnPublisherVideoTrackChanged(VideoStreamTrack videoTrack)
18801885
{
18811886
PublisherVideoTrackChanged?.Invoke();
18821887
}
1888+
1889+
void PublisherOnDisconnected()
1890+
{
1891+
if (CallState == CallingState.Joined || CallState == CallingState.Joining)
1892+
{
1893+
PeerConnectionDisconnectedDuringSession?.Invoke();
1894+
}
1895+
}
18831896

18841897
private void OnSfuWebSocketDisconnected()
18851898
{
@@ -1899,6 +1912,7 @@ private static bool AssertCallIdMatch(IStreamCall activeCall, string callId, ILo
18991912

19001913
return true;
19011914
}
1915+
19021916

19031917
private void SubscribeToSfuEvents()
19041918
{

Packages/StreamVideo/Runtime/Core/LowLevelClient/StreamPeerConnection.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ internal class StreamPeerConnection : IDisposable
3131
public event Action<VideoStreamTrack> PublisherVideoTrackChanged;
3232
public event Action<AudioStreamTrack> PublisherAudioTrackChanged;
3333

34+
public event Action Disconnected;
35+
3436
public bool IsRemoteDescriptionAvailable
3537
{
3638
get
@@ -403,6 +405,11 @@ private void OnConnectionStateChange(RTCPeerConnectionState state)
403405
_logs.Warning($"[{_peerType}] OnConnectionStateChange to: {state}");
404406
#endif
405407
_tracer?.Trace(PeerConnectionTraceKey.OnConnectionStateChange, state.ToString());
408+
409+
if (state == RTCPeerConnectionState.Disconnected)
410+
{
411+
Disconnected?.Invoke();
412+
}
406413
}
407414

408415
private void OnTrack(RTCTrackEvent trackEvent)

Packages/StreamVideo/Runtime/Core/StreamVideoClient.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ public enum DisconnectReason
4747
///
4848
/// </summary>
4949
CoordinatorWsDisconnected,
50+
51+
VideoServerDisconnected,
5052
}
5153

5254
public delegate void CallHandler(IStreamCall call);
@@ -556,6 +558,12 @@ private void SubscribeTo(StreamVideoLowLevelClient lowLevelClient)
556558

557559
lowLevelClient.Disconnected += OnLowLevelClientDisconnected;
558560
lowLevelClient.SfuDisconnected += OnLowLevelClientSfuDisconnected;
561+
lowLevelClient.RtcSession.PeerConnectionDisconnectedDuringSession += OnRtcPeerConnectionDisconnectedDuringSession;
562+
}
563+
564+
private void OnRtcPeerConnectionDisconnectedDuringSession()
565+
{
566+
Disconnected?.Invoke(DisconnectReason.VideoServerDisconnected);
559567
}
560568

561569
private void UnsubscribeFrom(StreamVideoLowLevelClient lowLevelClient)
@@ -594,6 +602,8 @@ private void UnsubscribeFrom(StreamVideoLowLevelClient lowLevelClient)
594602

595603
lowLevelClient.Disconnected -= OnLowLevelClientDisconnected;
596604
lowLevelClient.SfuDisconnected -= OnLowLevelClientSfuDisconnected;
605+
606+
lowLevelClient.RtcSession.PeerConnectionDisconnectedDuringSession -= OnRtcPeerConnectionDisconnectedDuringSession;
597607
}
598608

599609
private void InternalLowLevelClientOnConnected()

0 commit comments

Comments
 (0)