From 8243a262f782d17bf41ee8bdf03659e33962f7eb Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Fri, 25 May 2018 13:41:28 +0200 Subject: [PATCH] Init web socket clients lazily --- .../appium/java_client/android/AndroidDriver.java | 11 +++++++++++ .../android/ListensToLogcatMessages.java | 14 +++++++------- .../java/io/appium/java_client/ios/IOSDriver.java | 11 +++++++++++ .../java_client/ios/ListensToSyslogMessages.java | 15 ++++++++------- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java index d543283f3..87a95128e 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -35,6 +35,7 @@ import io.appium.java_client.screenrecording.CanRecordScreen; import io.appium.java_client.service.local.AppiumDriverLocalService; import io.appium.java_client.service.local.AppiumServiceBuilder; +import io.appium.java_client.ws.StringWebSocketClient; import org.openqa.selenium.Capabilities; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.HttpCommandExecutor; @@ -66,6 +67,8 @@ public class AndroidDriver private static final String ANDROID_PLATFORM = MobilePlatform.ANDROID; + private StringWebSocketClient logcatClient; + /** * Creates a new instance based on command {@code executor} and {@code capabilities}. * @@ -193,4 +196,12 @@ public AndroidBatteryInfo getBatteryInfo() { return new AndroidBatteryInfo((Map) execute(EXECUTE_SCRIPT, ImmutableMap.of( "script", "mobile: batteryInfo", "args", Collections.emptyList()))); } + + @Override + public synchronized StringWebSocketClient getLogcatClient() { + if (logcatClient == null) { + logcatClient = new StringWebSocketClient(); + } + return logcatClient; + } } diff --git a/src/main/java/io/appium/java_client/android/ListensToLogcatMessages.java b/src/main/java/io/appium/java_client/android/ListensToLogcatMessages.java index 4b2629815..bbc560aac 100644 --- a/src/main/java/io/appium/java_client/android/ListensToLogcatMessages.java +++ b/src/main/java/io/appium/java_client/android/ListensToLogcatMessages.java @@ -31,7 +31,7 @@ import java.util.function.Consumer; public interface ListensToLogcatMessages extends ExecutesMethod { - StringWebSocketClient logcatClient = new StringWebSocketClient(); + StringWebSocketClient getLogcatClient(); /** * Start logcat messages broadcast via web socket. @@ -68,7 +68,7 @@ default void startLogcatBroadcast(String host, int port) { } catch (URISyntaxException e) { throw new IllegalArgumentException(e); } - logcatClient.connect(endpointUri); + getLogcatClient().connect(endpointUri); } /** @@ -80,7 +80,7 @@ default void startLogcatBroadcast(String host, int port) { * @param handler a function, which accepts a single argument, which is the actual log message */ default void addLogcatMessagesListener(Consumer handler) { - logcatClient.addMessageHandler(handler); + getLogcatClient().addMessageHandler(handler); } /** @@ -92,7 +92,7 @@ default void addLogcatMessagesListener(Consumer handler) { * @param handler a function, which accepts a single argument, which is the actual exception instance */ default void addLogcatErrorsListener(Consumer handler) { - logcatClient.addErrorHandler(handler); + getLogcatClient().addErrorHandler(handler); } /** @@ -105,7 +105,7 @@ default void addLogcatErrorsListener(Consumer handler) { * connected to the web socket */ default void addLogcatConnectionListener(Runnable handler) { - logcatClient.addConnectionHandler(handler); + getLogcatClient().addConnectionHandler(handler); } /** @@ -118,14 +118,14 @@ default void addLogcatConnectionListener(Runnable handler) { * disconnected from the web socket */ default void addLogcatDisconnectionListener(Runnable handler) { - logcatClient.addDisconnectionHandler(handler); + getLogcatClient().addDisconnectionHandler(handler); } /** * Removes all existing logcat handlers. */ default void removeAllLogcatListeners() { - logcatClient.removeAllHandlers(); + getLogcatClient().removeAllHandlers(); } /** diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java index c0a0c0705..75e4df212 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -34,6 +34,7 @@ import io.appium.java_client.screenrecording.CanRecordScreen; import io.appium.java_client.service.local.AppiumDriverLocalService; import io.appium.java_client.service.local.AppiumServiceBuilder; +import io.appium.java_client.ws.StringWebSocketClient; import org.openqa.selenium.Alert; import org.openqa.selenium.Capabilities; import org.openqa.selenium.WebElement; @@ -68,6 +69,8 @@ public class IOSDriver private static final String IOS_PLATFORM = MobilePlatform.IOS; + private StringWebSocketClient syslogClient; + /** * Creates a new instance based on command {@code executor} and {@code capabilities}. * @@ -225,4 +228,12 @@ class IOSAlert implements Alert { } } + + @Override + public synchronized StringWebSocketClient getSyslogClient() { + if (syslogClient == null) { + syslogClient = new StringWebSocketClient(); + } + return syslogClient; + } } diff --git a/src/main/java/io/appium/java_client/ios/ListensToSyslogMessages.java b/src/main/java/io/appium/java_client/ios/ListensToSyslogMessages.java index a0dbf44a1..6bb15821c 100644 --- a/src/main/java/io/appium/java_client/ios/ListensToSyslogMessages.java +++ b/src/main/java/io/appium/java_client/ios/ListensToSyslogMessages.java @@ -31,7 +31,8 @@ import java.util.function.Consumer; public interface ListensToSyslogMessages extends ExecutesMethod { - StringWebSocketClient syslogClient = new StringWebSocketClient(); + + StringWebSocketClient getSyslogClient(); /** * Start syslog messages broadcast via web socket. @@ -68,7 +69,7 @@ default void startSyslogBroadcast(String host, int port) { } catch (URISyntaxException e) { throw new IllegalArgumentException(e); } - syslogClient.connect(endpointUri); + getSyslogClient().connect(endpointUri); } /** @@ -80,7 +81,7 @@ default void startSyslogBroadcast(String host, int port) { * @param handler a function, which accepts a single argument, which is the actual log message */ default void addSyslogMessagesListener(Consumer handler) { - syslogClient.addMessageHandler(handler); + getSyslogClient().addMessageHandler(handler); } /** @@ -92,7 +93,7 @@ default void addSyslogMessagesListener(Consumer handler) { * @param handler a function, which accepts a single argument, which is the actual exception instance */ default void addSyslogErrorsListener(Consumer handler) { - syslogClient.addErrorHandler(handler); + getSyslogClient().addErrorHandler(handler); } /** @@ -105,7 +106,7 @@ default void addSyslogErrorsListener(Consumer handler) { * connected to the web socket */ default void addSyslogConnectionListener(Runnable handler) { - syslogClient.addConnectionHandler(handler); + getSyslogClient().addConnectionHandler(handler); } /** @@ -118,14 +119,14 @@ default void addSyslogConnectionListener(Runnable handler) { * disconnected from the web socket */ default void addSyslogDisconnectionListener(Runnable handler) { - syslogClient.addDisconnectionHandler(handler); + getSyslogClient().addDisconnectionHandler(handler); } /** * Removes all existing syslog handlers. */ default void removeAllSyslogListeners() { - syslogClient.removeAllHandlers(); + getSyslogClient().removeAllHandlers(); } /**