From 720666479909f32f00beb729a7d124fb448e8761 Mon Sep 17 00:00:00 2001 From: USAMAWIZARD Date: Fri, 28 Feb 2025 22:08:43 +0530 Subject: [PATCH 1/3] connect websocket in seprete thread --- .../websocket/WebSocketConstants.java | 2 ++ .../websocket/WebSocketHandler.java | 33 ++++++++++++------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketConstants.java b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketConstants.java index 983d9df2..b8a30604 100644 --- a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketConstants.java +++ b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketConstants.java @@ -449,4 +449,6 @@ private WebSocketConstants() { */ public static final String BROADCAST = "broadcast"; + public static final int WEBSOCKET_CONNECTION_TIMEOUT = 10000; //10 sec + } diff --git a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java index 9884c479..dd854daa 100644 --- a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java +++ b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java @@ -24,10 +24,11 @@ import static io.antmedia.webrtcandroidframework.websocket.WebSocketConstants.DEFINITION; import static io.antmedia.webrtcandroidframework.websocket.WebSocketConstants.NOTIFICATION_COMMAND; +import static io.antmedia.webrtcandroidframework.websocket.WebSocketConstants.WEBSOCKET_CONNECTION_TIMEOUT; + import com.google.gson.Gson; import com.google.gson.GsonBuilder; - public class WebSocketHandler implements WebSocket.WebSocketConnectionObserver { private static final String TAG = "WebSocketHandler"; private static final int CLOSE_TIMEOUT = 1000; @@ -63,18 +64,26 @@ public WebSocketHandler(AntMediaSignallingEvents signallingListener, Handler han public void connect(final String wsUrl) { checkIfCalledOnValidThread(); - wsServerUrl = wsUrl; - Log.d(TAG, "Connecting WebSocket to: " + wsUrl); + if(wsUrl==null || wsUrl.isBlank()) + return; + ws = new WebSocketConnection(); - try { - ws.connect(new URI(wsServerUrl), this); - } catch (WebSocketException e) { - e.printStackTrace(); - disconnect(false); - } catch (URISyntaxException e) { - e.printStackTrace(); - disconnect(false); - } + Thread connectorThread = new Thread(() -> { + try { + ws.connect(new URI(wsUrl), this); + } catch (WebSocketException | URISyntaxException e) { + Log.e(TAG,"failed to connect WebSocket"); + } + }); + connectorThread.start(); + handler.postDelayed(new Runnable() { + public void run() { + if (connectorThread.isAlive()) { + connectorThread.interrupt(); + Log.e(TAG, "exception occurred while waiting for websocket"); + } + } + },WEBSOCKET_CONNECTION_TIMEOUT); } public void sendTextMessage(String message) { From 31f1b3e679af2be795f4d230b2a380aae7ad5709 Mon Sep 17 00:00:00 2001 From: USAMAWIZARD Date: Fri, 28 Feb 2025 22:37:57 +0530 Subject: [PATCH 2/3] connect websocket in seprete thread --- .../websocket/WebSocketHandler.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java index dd854daa..5506090a 100644 --- a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java +++ b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java @@ -70,9 +70,13 @@ public void connect(final String wsUrl) { ws = new WebSocketConnection(); Thread connectorThread = new Thread(() -> { try { - ws.connect(new URI(wsUrl), this); - } catch (WebSocketException | URISyntaxException e) { - Log.e(TAG,"failed to connect WebSocket"); + ws.connect(new URI(wsServerUrl), this); + } catch (WebSocketException e) { + e.printStackTrace(); + disconnect(false); + } catch (URISyntaxException e) { + e.printStackTrace(); + disconnect(false); } }); connectorThread.start(); From a1e4f0a343b81ba131d0692e9002d6dde19093a2 Mon Sep 17 00:00:00 2001 From: USAMAWIZARD Date: Fri, 28 Feb 2025 22:47:40 +0530 Subject: [PATCH 3/3] connect websocket in seprete thread --- .../websocket/WebSocketHandler.java | 6 +++++- .../WebSocketHandlerTest.java | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java index 5506090a..7b03185a 100644 --- a/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java +++ b/webrtc-android-framework/src/main/java/io/antmedia/webrtcandroidframework/websocket/WebSocketHandler.java @@ -62,12 +62,16 @@ public WebSocketHandler(AntMediaSignallingEvents signallingListener, Handler han gson = builder.create(); } + public WebSocketConnection creteWebSocket(){ + return new WebSocketConnection(); + } public void connect(final String wsUrl) { checkIfCalledOnValidThread(); if(wsUrl==null || wsUrl.isBlank()) return; + wsServerUrl = wsUrl; - ws = new WebSocketConnection(); + ws = creteWebSocket(); Thread connectorThread = new Thread(() -> { try { ws.connect(new URI(wsServerUrl), this); diff --git a/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebSocketHandlerTest.java b/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebSocketHandlerTest.java index be482c3e..079b2c23 100644 --- a/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebSocketHandlerTest.java +++ b/webrtc-android-framework/src/test/java/io/antmedia/webrtcandroidframework/WebSocketHandlerTest.java @@ -2,6 +2,7 @@ import android.os.Handler; +import org.awaitility.Awaitility; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -13,16 +14,19 @@ import org.webrtc.IceCandidate; import org.webrtc.SessionDescription; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; import java.util.concurrent.Executors; import de.tavendo.autobahn.WebSocketConnection; +import de.tavendo.autobahn.WebSocketException; import io.antmedia.webrtcandroidframework.websocket.AntMediaSignallingEvents; import io.antmedia.webrtcandroidframework.websocket.Broadcast; import io.antmedia.webrtcandroidframework.websocket.WebSocketConstants; import io.antmedia.webrtcandroidframework.websocket.WebSocketHandler; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.*; import com.google.gson.Gson; @@ -452,6 +456,15 @@ public void testOnBroadcastObjectNotification() { } + @Test + public void testWsConnect() throws InterruptedException, URISyntaxException, WebSocketException { + String url = "wss://test.antmedia.io:5443/LiveApp/websocket"; + doReturn(ws).when(webSocketHandler).creteWebSocket(); + webSocketHandler.connect(url); + Thread.sleep(3000); + verify(ws,times(1)).connect(new URI(url),webSocketHandler); + } + @Test public void testWsReconnection(){ Handler wsReconnectionHandlerMock = mock(Handler.class);