diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java index 99e9e01..26d6f62 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java @@ -36,7 +36,6 @@ public class LiveClientSettings { /** * ISO-Language for Client */ - private String clientLanguage; /** @@ -44,7 +43,6 @@ public class LiveClientSettings { */ private boolean retryOnConnectionFailure; - /** * Before retrying connect, wait for select amount of time */ @@ -53,42 +51,35 @@ public class LiveClientSettings { /** * Whether to print Logs to Console */ - private boolean printToConsole = true; + /** * LoggingLevel for Logs */ private Level logLevel; - /** * Optional: Use it if you need to change TikTok live hostname in builder */ private String hostName; - /** * Parameters used in requests to TikTok api */ private HttpClientSettings httpSettings; - - /* + /** * Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId * documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages */ private String sessionId; - /* + /** * Optional: By default roomID is fetched before connect to live, but you can set it manually * */ private String roomId; - - - - public static LiveClientSettings createDefault() { var httpSettings = new HttpClientSettings(); @@ -103,12 +94,10 @@ public class LiveClientSettings { clientSettings.setPrintToConsole(false); clientSettings.setLogLevel(Level.ALL); - clientSettings.setHttpSettings(httpSettings); return clientSettings; } - /** * Default Parameters for HTTP-Request */ @@ -147,11 +136,9 @@ public class LiveClientSettings { clientParams.put("webcast_sdk_version", "1.3.0"); clientParams.put("update_version_code", "1.3.0"); - return clientParams; } - /** * Default Headers for HTTP-Request */ @@ -167,6 +154,4 @@ public class LiveClientSettings { headers.put("Accept-Language", "en-US,en; q=0.9"); return headers; } - -} - +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java index 6354acb..48061ef 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java @@ -87,6 +87,7 @@ public class ProxyClientSettings implements Iterator @Override public void remove() { proxyList.remove(index); + lastSuccess = false; // index is no longer valid and lastSuccess needs falsified } public void setIndex(int index) { diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java index 0535838..d3f0f19 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java @@ -26,7 +26,7 @@ import io.github.jwdeveloper.tiktok.*; import io.github.jwdeveloper.tiktok.data.dto.ProxyData; import io.github.jwdeveloper.tiktok.data.requests.LiveConnectionData; import io.github.jwdeveloper.tiktok.data.settings.*; -import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException; +import io.github.jwdeveloper.tiktok.exceptions.*; import io.github.jwdeveloper.tiktok.live.LiveClient; import org.java_websocket.client.WebSocketClient; @@ -91,6 +91,20 @@ public class TikTokWebSocketClient implements SocketClient { } public void connectProxy(ProxyClientSettings proxySettings) { + try { + if (proxySettings.getType() == Proxy.Type.SOCKS) { + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[]{new X509TrustManager() { + public void checkClientTrusted(X509Certificate[] x509Certificates, String s) {} + public void checkServerTrusted(X509Certificate[] x509Certificates, String s) {} + public X509Certificate[] getAcceptedIssuers() { return null; } + }}, null); + webSocketClient.setSocketFactory(sc.getSocketFactory()); + } + } catch (Exception e) { + // This will never be thrown. + throw new TikTokProxyRequestException("Unable to set Socks proxy SSL instance"); + } while (proxySettings.hasNext()) { ProxyData proxyData = proxySettings.next(); if (!tryProxyConnection(proxySettings, proxyData)) { @@ -98,6 +112,7 @@ public class TikTokWebSocketClient implements SocketClient { proxySettings.remove(); continue; } + pingingTask.run(webSocketClient); isConnected = true; break; } @@ -107,21 +122,6 @@ public class TikTokWebSocketClient implements SocketClient { public boolean tryProxyConnection(ProxyClientSettings proxySettings, ProxyData proxyData) { try { - if (proxySettings.getType() == Proxy.Type.SOCKS) { - SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, new TrustManager[]{new X509TrustManager() { - public void checkClientTrusted(X509Certificate[] x509Certificates, String s) { - } - - public void checkServerTrusted(X509Certificate[] x509Certificates, String s) { - } - - public X509Certificate[] getAcceptedIssuers() { - return null; - } - }}, null); - webSocketClient.setSocketFactory(sc.getSocketFactory()); - } webSocketClient.setProxy(new Proxy(proxySettings.getType(), proxyData.toSocketAddress())); webSocketClient.connect(); return true; diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java index 25c184a..ed28478 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java @@ -128,12 +128,14 @@ public class RecorderListener implements LiveRecorder { @TikTokEventObserver private void onDisconnected(LiveClient liveClient, TikTokDisconnectedEvent event) { - liveDownloadThread.interrupt(); + if (isConnected()) + liveDownloadThread.interrupt(); } @TikTokEventObserver private void onDisconnected(LiveClient liveClient, TikTokLiveEndedEvent event) { - liveDownloadThread.interrupt(); + if (isConnected()) + liveDownloadThread.interrupt(); } private int terminateFfmpeg(final Process process) { @@ -194,4 +196,8 @@ public class RecorderListener implements LiveRecorder { return new DownloadData(urlLink, sessionId); } + + private boolean isConnected() { + return liveDownloadThread != null && liveDownloadThread.isAlive(); + } } \ No newline at end of file