From 7616091fd4d2650b305afa415feaa2083741c467 Mon Sep 17 00:00:00 2001 From: Haesu Gwon Date: Thu, 4 Aug 2022 14:45:06 +0900 Subject: [PATCH] [WebRTC] Change private SignalingServer/Client internal APIs (#4463) --- .../WebRTC/WebRTCSignalingEventArgs.cs | 4 -- .../WebRTC/WebRTCSignalingServer.cs | 80 +++++++++------------- 2 files changed, 31 insertions(+), 53 deletions(-) diff --git a/src/Tizen.Multimedia.Remoting/WebRTC/WebRTCSignalingEventArgs.cs b/src/Tizen.Multimedia.Remoting/WebRTC/WebRTCSignalingEventArgs.cs index c6fc5d4..18abb45 100755 --- a/src/Tizen.Multimedia.Remoting/WebRTC/WebRTCSignalingEventArgs.cs +++ b/src/Tizen.Multimedia.Remoting/WebRTC/WebRTCSignalingEventArgs.cs @@ -22,7 +22,6 @@ namespace Tizen.Multimedia.Remoting /// /// Provides data for the event. /// - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public class WebRTCSignalingEventArgs : EventArgs { @@ -37,7 +36,6 @@ namespace Tizen.Multimedia.Remoting /// Gets the signaling message type. /// /// The signaling message type. - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public SignalingMessageType MessageType { get; } @@ -45,7 +43,6 @@ namespace Tizen.Multimedia.Remoting /// Gets the message from remote peer. /// /// The message. - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public string Message { get; } @@ -53,7 +50,6 @@ namespace Tizen.Multimedia.Remoting /// Returns a string that represents the current object. /// /// A string that represents the current object. - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public override string ToString() => $"MessageType={MessageType}, Message={Message}"; } diff --git a/src/Tizen.Multimedia.Remoting/WebRTC/WebRTCSignalingServer.cs b/src/Tizen.Multimedia.Remoting/WebRTC/WebRTCSignalingServer.cs index 24d0277..7852c44 100755 --- a/src/Tizen.Multimedia.Remoting/WebRTC/WebRTCSignalingServer.cs +++ b/src/Tizen.Multimedia.Remoting/WebRTC/WebRTCSignalingServer.cs @@ -17,6 +17,7 @@ using System; using System.ComponentModel; using System.Diagnostics; +using System.Threading.Tasks; using static Interop; namespace Tizen.Multimedia.Remoting @@ -24,7 +25,6 @@ namespace Tizen.Multimedia.Remoting /// /// Provides the ability to control WebRTCSignalingServer. /// - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public class WebRTCSignalingServer : IDisposable { @@ -35,7 +35,6 @@ namespace Tizen.Multimedia.Remoting /// Initializes a new instance of the class. /// /// The server port. - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public WebRTCSignalingServer(int port) { @@ -48,7 +47,6 @@ namespace Tizen.Multimedia.Remoting /// /// Starts the signaling server. /// - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public void Start() { @@ -61,7 +59,6 @@ namespace Tizen.Multimedia.Remoting /// /// Stops the signaling server. /// - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public void Stop() { @@ -77,7 +74,6 @@ namespace Tizen.Multimedia.Remoting /// Releases all resources used by the current instance. /// /// The WebRTCSignalingServer has already been disposed. - /// 9 public void Dispose() { Dispose(true); @@ -91,7 +87,6 @@ namespace Tizen.Multimedia.Remoting /// true to release both managed and unmanaged resources; /// false to release only unmanaged resources. /// - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] protected virtual void Dispose(bool disposing) { @@ -122,12 +117,12 @@ namespace Tizen.Multimedia.Remoting /// /// Provides the ability to control WebRTCSignalingClient. /// - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public class WebRTCSignalingClient : IDisposable { - private readonly IntPtr _handle; + private IntPtr _handle; private bool _isConnected; + private (string serverIp, int port) _serverInfo; private SignalingClient.SignalingMessageCallback _signalingMessageCallback; private bool _disposed; @@ -136,69 +131,60 @@ namespace Tizen.Multimedia.Remoting /// /// The server IP. /// The server port. - /// - /// 9 + /// [EditorBrowsable(EditorBrowsableState.Never)] public WebRTCSignalingClient(string serverIp, int port) { - IntPtr zero = IntPtr.Zero; - ValidationUtil.ValidateIsNullOrEmpty(serverIp, nameof(serverIp)); - _signalingMessageCallback = (type, message, _) => + if (port < 0) { - Log.Info(WebRTCLog.Tag, $"type:{type}, message:{message}"); - - if (type == SignalingMessageType.Connected) - { - _isConnected = true; - } - - SignalingMessage?.Invoke(this, new WebRTCSignalingEventArgs(type, message)); - }; + throw new ArgumentException("port should be greater than zero."); + } - SignalingClient.Connect(serverIp, port, _signalingMessageCallback, zero, out _handle). - ThrowIfFailed("Failed to connect to server"); + _serverInfo.serverIp = serverIp; + _serverInfo.port = port; } /// /// Occurs when a message to be handled is sent from the remote peer or the signaling server. /// - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public event EventHandler SignalingMessage; /// - /// Gets the state whether signaling client is connected to remote peer or not. + /// Connect to signaling server and return client id. /// - /// 9 - [EditorBrowsable(EditorBrowsableState.Never)] - public bool IsConnected => _isConnected; - - /// - /// Gets the signaling client ID. - /// - /// - /// This method must be called after event is occurred with . - /// /// The signaling client ID. /// The WebRTCSignalingClient has already been disposed. - /// The signaling client is not connected yet. - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] - public int GetID() + public async Task Connect() { ValidateNotDisposed(); - if (!IsConnected) + var tcsConnected = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); + + _signalingMessageCallback = (type, message, _) => { - throw new InvalidOperationException("Client is not connected to server yet."); - } + Log.Info(WebRTCLog.Tag, $"type:{type}, message:{message}"); + + if (!_isConnected && type == SignalingMessageType.Connected) + { + _isConnected = true; - SignalingClient.GetID(_handle, out int id). - ThrowIfFailed("Failed to get signaling client ID"); + SignalingClient.GetID(_handle, out int id).ThrowIfFailed("Failed to get signaling client ID"); + Log.Info(WebRTCLog.Tag, $"Client ID[{id}]"); + + tcsConnected.TrySetResult(id); + } + + SignalingMessage?.Invoke(this, new WebRTCSignalingEventArgs(type, message)); + }; + + SignalingClient.Connect(_serverInfo.serverIp, _serverInfo.port, _signalingMessageCallback, IntPtr.Zero, out _handle). + ThrowIfFailed("Failed to connect to server"); - return id; + return await tcsConnected.Task; } /// @@ -207,7 +193,6 @@ namespace Tizen.Multimedia.Remoting /// The ID of remote peer. /// The WebRTCSignalingClient has already been disposed. /// - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public void RequestSession(int peerId) { @@ -222,7 +207,6 @@ namespace Tizen.Multimedia.Remoting /// /// /// The WebRTCSignalingClient has already been disposed. - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] public void SendMessage(string message) { @@ -238,7 +222,6 @@ namespace Tizen.Multimedia.Remoting /// Releases all resources used by the current instance. /// /// The WebRTCSignalingClient has already been disposed. - /// 9 public void Dispose() { Dispose(true); @@ -252,7 +235,6 @@ namespace Tizen.Multimedia.Remoting /// true to release both managed and unmanaged resources; /// false to release only unmanaged resources. /// - /// 9 [EditorBrowsable(EditorBrowsableState.Never)] protected virtual void Dispose(bool disposing) { -- 2.7.4