diff --git a/com.unity.renderstreaming/Runtime/Scripts/Signaling/HttpSignaling.cs b/com.unity.renderstreaming/Runtime/Scripts/Signaling/HttpSignaling.cs index 717637cf3..d7480c2f0 100644 --- a/com.unity.renderstreaming/Runtime/Scripts/Signaling/HttpSignaling.cs +++ b/com.unity.renderstreaming/Runtime/Scripts/Signaling/HttpSignaling.cs @@ -1,5 +1,7 @@ using System; +using System.Collections.Generic; using System.IO; +using System.Linq; using System.Net; using System.Threading; using Unity.WebRTC; @@ -9,9 +11,11 @@ namespace Unity.RenderStreaming.Signaling { public class HttpSignaling : ISignaling { - private string m_url; - private int m_timeout; - private SynchronizationContext m_mainThreadContext; + private static HashSet instances = new HashSet(); + + private readonly string m_url; + private readonly int m_timeout; + private readonly SynchronizationContext m_mainThreadContext; private bool m_running; private Thread m_signalingThread; @@ -35,11 +39,19 @@ public HttpSignaling(SignalingSettings signalingSettings, SynchronizationContext ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true; } + + if (instances.Any(x => x.Url == m_url)) + { + Debug.LogWarning($"Other {nameof(HttpSignaling)} exists with same URL:{m_url}. Signaling process may be in conflict."); + } + + instances.Add(this); } ~HttpSignaling() { Stop(); + instances.Remove(this); } public void Start() diff --git a/com.unity.renderstreaming/Runtime/Scripts/Signaling/WebSocketSignaling.cs b/com.unity.renderstreaming/Runtime/Scripts/Signaling/WebSocketSignaling.cs index 249608433..1e4af7226 100644 --- a/com.unity.renderstreaming/Runtime/Scripts/Signaling/WebSocketSignaling.cs +++ b/com.unity.renderstreaming/Runtime/Scripts/Signaling/WebSocketSignaling.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; using System.Security.Authentication; using System.Text; using System.Threading; @@ -10,12 +12,14 @@ namespace Unity.RenderStreaming.Signaling { public class WebSocketSignaling : ISignaling { - private string m_url; - private float m_timeout; - private SynchronizationContext m_mainThreadContext; + private static HashSet instances = new HashSet(); + + private readonly string m_url; + private readonly float m_timeout; + private readonly SynchronizationContext m_mainThreadContext; private bool m_running; private Thread m_signalingThread; - private AutoResetEvent m_wsCloseEvent; + private readonly AutoResetEvent m_wsCloseEvent; private WebSocket m_webSocket; public string Url { get { return m_url; } } @@ -30,12 +34,21 @@ public WebSocketSignaling(SignalingSettings signalingSettings, SynchronizationCo m_timeout = 5.0f; m_mainThreadContext = mainThreadContext; m_wsCloseEvent = new AutoResetEvent(false); + + if (instances.Any(x => x.Url == m_url)) + { + Debug.LogWarning($"Other {nameof(WebSocketSignaling)} exists with same URL:{m_url}. Signaling process may be in conflict."); + } + + instances.Add(this); } ~WebSocketSignaling() { if (m_running) Stop(); + + instances.Remove(this); } public void Start()