From 15c642297c5370ba0d842db6eb53a7b77e97833d Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Wed, 28 Feb 2024 21:03:00 -0500 Subject: [PATCH 1/4] Fixed Live User Data Mapper throwing MalformedJsonException! --- .../github/jwdeveloper/tiktok/TikTokLive.java | 12 +--- .../jwdeveloper/tiktok/TikTokLiveClient.java | 3 + .../tiktok/TikTokLiveHttpClient.java | 14 ++-- .../tiktok/common/ActionResult.java | 23 ++++++- .../tiktok/common/ActionResultBuilder.java | 9 ++- .../http/mappers/LiveUserDataMapper.java | 69 ++++++++++--------- 6 files changed, 79 insertions(+), 51 deletions(-) diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java index cde7406..204e9cb 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java @@ -28,7 +28,6 @@ import io.github.jwdeveloper.tiktok.http.LiveHttpClient; import io.github.jwdeveloper.tiktok.live.GiftsManager; import io.github.jwdeveloper.tiktok.live.builder.LiveClientBuilder; -import java.util.List; import java.util.concurrent.CompletableFuture; public class TikTokLive { @@ -102,14 +101,9 @@ public class TikTokLive { * @return GiftsManager */ public static GiftsManager gifts() { - if (giftsManager != null) { - return giftsManager; - } - synchronized (GiftsManager.class) - { - if (giftsManager == null) - { - return new TikTokGiftsManager(requests().fetchGiftsData().getGifts()); + if (giftsManager == null) { + synchronized (GiftsManager.class) { + giftsManager = new TikTokGiftsManager(requests().fetchGiftsData().getGifts()); } } return giftsManager; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java index 0ec4dff..3090363 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java @@ -184,6 +184,9 @@ public class TikTokLiveClient implements LiveClient { tikTokEventHandler.publish(this, event); } + @Override + public void publishMessage(String base64) {} + @Override public GiftsManager getGiftManager() { return giftsManager; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java index eadde29..0d1098d 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java @@ -83,7 +83,7 @@ public class TikTokLiveHttpClient implements LiveHttpClient .toJsonResponse(); if (result.isFailure()) - throw new TikTokLiveRequestException("Unable to fetch gifts information's"+result.toStack()); + throw new TikTokLiveRequestException("Unable to fetch gifts information's - "+result); var json = result.getContent(); return giftsDataMapper.map(json); @@ -111,10 +111,10 @@ public class TikTokLiveHttpClient implements LiveHttpClient .toJsonResponse(); if (result.isFailure()) - throw new TikTokLiveRequestException("Unable to get information's about user"+result.toStack()); + throw new TikTokLiveRequestException("Unable to get information's about user - "+result); var json = result.getContent(); - return liveUserDataMapper.map(json); + return liveUserDataMapper.map(json, logger); } @Override @@ -138,7 +138,7 @@ public class TikTokLiveHttpClient implements LiveHttpClient .toJsonResponse(); if (result.isFailure()) - throw new TikTokLiveRequestException("Unable to get info about live room"+result.toStack()); + throw new TikTokLiveRequestException("Unable to get info about live room - "+result); var json = result.getContent(); return liveDataMapper.map(json); @@ -153,7 +153,7 @@ public class TikTokLiveHttpClient implements LiveHttpClient var resultHeader = ActionResult.of(credentialsResponse.headers().firstValue("x-set-tt-cookie")); if (resultHeader.isFailure()) { logger.warning("SignServer Headers: "+request.getRoomId()+" - "+credentialsResponse.headers().map()); - throw new TikTokSignServerException("Sign server did not return the x-set-tt-cookie header"+result.toStack()); + throw new TikTokSignServerException("Sign server did not return the x-set-tt-cookie header - "+result); } var websocketCookie = resultHeader.getContent(); var webcastResponse = WebcastResponse.parseFrom(credentialsResponse.body()); @@ -169,7 +169,7 @@ public class TikTokLiveHttpClient implements LiveHttpClient return new LiveConnectionData.Response(websocketCookie, webSocketUrl, webcastResponse); } catch (InvalidProtocolBufferException e) { - throw new TikTokSignServerException("Unable to parse websocket credentials response to WebcastResponse"+result.toStack()); + throw new TikTokSignServerException("Unable to parse websocket credentials response to WebcastResponse - "+result); } } @@ -197,7 +197,7 @@ public class TikTokLiveHttpClient implements LiveHttpClient var result = builder.build().toResponse(); if (result.isFailure()) - throw new TikTokSignServerException("Unable to get websocket connection credentials"+result.toStack()); + throw new TikTokSignServerException("Unable to get websocket connection credentials - "+result); return result; } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java index 34ab7b3..ac8cd60 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java @@ -1,6 +1,8 @@ package io.github.jwdeveloper.tiktok.common; +import com.google.gson.*; import lombok.Data; +import lombok.experimental.Accessors; import java.util.Optional; import java.util.function.Function; @@ -11,6 +13,8 @@ public class ActionResult { private boolean success = true; private T content; private String message; + @Accessors(chain = true, fluent = true) + private ActionResult previous; protected ActionResult(T object) { this.content = object; @@ -41,8 +45,9 @@ public class ActionResult { public boolean hasMessage() { return message != null; } - public String toStack() { - return hasMessage() ? " - "+message : ""; + + public boolean hasPrevious() { + return previous != null; } public boolean hasContent() { @@ -84,4 +89,18 @@ public class ActionResult { public static ActionResult failure() { return failure(null); } + + public JsonObject toJson() { + JsonObject map = new JsonObject(); + map.addProperty("success", success); + map.add("content", new Gson().toJsonTree(content)); + map.addProperty("message", message); + map.add("previous", hasPrevious() ? previous.toJson() : null); + return map; + } + + @Override + public String toString() { + return "ActionResult: "+new Gson().newBuilder().setPrettyPrinting().create().toJson(toJson()); + } } \ No newline at end of file diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResultBuilder.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResultBuilder.java index 369d35f..f9383d9 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResultBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResultBuilder.java @@ -1,5 +1,8 @@ package io.github.jwdeveloper.tiktok.common; +import lombok.Setter; +import lombok.experimental.Accessors; + import java.util.Arrays; import java.util.stream.Collectors; @@ -7,6 +10,8 @@ public class ActionResultBuilder { private final T content; private String message; + @Setter @Accessors(fluent = true, chain = true) + private ActionResult previous; public ActionResultBuilder(T content) { this.content = content; @@ -18,10 +23,10 @@ public class ActionResultBuilder } public ActionResult success() { - return ActionResult.success(content, message); + return ActionResult.success(content, message).previous(previous); } public ActionResult failure() { - return ActionResult.success(content, message); + return ActionResult.success(content, message).previous(previous); } } \ No newline at end of file diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/LiveUserDataMapper.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/LiveUserDataMapper.java index 6dd2aed..9b9cd4b 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/LiveUserDataMapper.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/LiveUserDataMapper.java @@ -22,45 +22,52 @@ */ package io.github.jwdeveloper.tiktok.http.mappers; -import com.google.gson.JsonParser; +import com.google.gson.*; import io.github.jwdeveloper.tiktok.data.requests.LiveUserData; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveRequestException; +import java.util.logging.Logger; + public class LiveUserDataMapper { - public LiveUserData.Response map(String json) { - var jsonObject = JsonParser.parseString(json).getAsJsonObject(); + public LiveUserData.Response map(String json, Logger logger) { + try { + var jsonObject = JsonParser.parseString(json).getAsJsonObject(); - var message = jsonObject.get("message").getAsString(); + var message = jsonObject.get("message").getAsString(); - if (message.equals("params_error")) { - throw new TikTokLiveRequestException("fetchRoomIdFromTiktokApi -> Unable to fetch roomID, contact the developer"); - } - if (message.equals("user_not_found")) { + if (message.equals("params_error")) { + throw new TikTokLiveRequestException("fetchRoomIdFromTiktokApi -> Unable to fetch roomID, contact the developer"); + } + if (message.equals("user_not_found")) { + return new LiveUserData.Response(json, LiveUserData.UserStatus.NotFound, "", -1); + } + //live -> status 2 + //live paused -> 3 + //not live -> status 4 + var element = jsonObject.get("data"); + if (element.isJsonNull()) { + return new LiveUserData.Response(json, LiveUserData.UserStatus.NotFound, "", -1); + } + var data = element.getAsJsonObject(); + var user = data.getAsJsonObject("user"); + var roomId = user.get("roomId").getAsString(); + var status = user.get("status").getAsInt(); + + var liveRoom = data.getAsJsonObject("liveRoom"); + long startTime = liveRoom.get("startTime").getAsLong(); + + var statusEnum = switch (status) { + case 2 -> LiveUserData.UserStatus.Live; + case 3 -> LiveUserData.UserStatus.LivePaused; + case 4 -> LiveUserData.UserStatus.Offline; + default -> LiveUserData.UserStatus.NotFound; + }; + + return new LiveUserData.Response(json, statusEnum, roomId, startTime); + } catch (JsonSyntaxException e) { + logger.warning("Malformed Json: '"+json+"' - Error Message: "+e.getMessage()); return new LiveUserData.Response(json, LiveUserData.UserStatus.NotFound, "", -1); } - //live -> status 2 - //live paused -> 3 - //not live -> status 4 - var element = jsonObject.get("data"); - if (element.isJsonNull()) { - return new LiveUserData.Response(json, LiveUserData.UserStatus.NotFound, "", -1); - } - var data = element.getAsJsonObject(); - var user = data.getAsJsonObject("user"); - var roomId = user.get("roomId").getAsString(); - var status = user.get("status").getAsInt(); - - var liveRoom = data.getAsJsonObject("liveRoom"); - long startTime = liveRoom.get("startTime").getAsLong(); - - var statusEnum = switch (status) { - case 2 -> LiveUserData.UserStatus.Live; - case 3 -> LiveUserData.UserStatus.LivePaused; - case 4 -> LiveUserData.UserStatus.Offline; - default -> LiveUserData.UserStatus.NotFound; - }; - - return new LiveUserData.Response(json, statusEnum, roomId, startTime); } } \ No newline at end of file From 29631ac4684b5b7acdbaccef1893ff2c76290618 Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Thu, 29 Feb 2024 19:19:23 -0500 Subject: [PATCH 2/4] Fixed Live User Data Mapper throwing MalformedJsonException! --- .../data/settings/LiveClientSettings.java | 18 ++++++++++++++++-- .../websocket/TikTokWebSocketClient.java | 4 ++-- .../websocket/TikTokWebSocketPingingTask.java | 16 +++++++--------- .../jwdeveloper/tiktok/CollectorExample.java | 9 +++++---- .../api/mongo/MongoDataCollectorSettings.java | 2 +- 5 files changed, 31 insertions(+), 18 deletions(-) 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 3ac9b9d..0567c89 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 @@ -86,9 +86,23 @@ public class LiveClientSettings { 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 + * Loop time in milliseconds between pings to TikTok + * @apiNote Min: 250 (0.25 seconds), Max: 30000 (30 seconds), Default: 5000 (5 seconds) */ + private long pingTaskTime = 5000; + + public void setPingTaskTime(long pingTaskTime) { + if (pingTaskTime < 250) + throw new IllegalArgumentException("Minimum allowed value 250 millseconds"); + if (pingTaskTime > 30000) + throw new IllegalArgumentException("Maximum allowed value 30000 milliseconds"); + this.pingTaskTime = pingTaskTime; + } + + /** + * Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId + * @see Documentation: How to obtain sessionId + */ private String sessionId; /** 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 d3f0f19..e0d1779 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 @@ -82,7 +82,7 @@ public class TikTokWebSocketClient implements SocketClient { private void connectDefault() { try { webSocketClient.connect(); - pingingTask.run(webSocketClient); + pingingTask.run(webSocketClient, clientSettings.getPingTaskTime()); isConnected = true; } catch (Exception e) { isConnected = false; @@ -112,7 +112,7 @@ public class TikTokWebSocketClient implements SocketClient { proxySettings.remove(); continue; } - pingingTask.run(webSocketClient); + pingingTask.run(webSocketClient, clientSettings.getPingTaskTime()); isConnected = true; break; } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketPingingTask.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketPingingTask.java index 90adbc4..e44987b 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketPingingTask.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketPingingTask.java @@ -8,13 +8,13 @@ public class TikTokWebSocketPingingTask { private Thread thread; private boolean isRunning = false; - private final int MIN_TIMEOUT = 250; - private final int MAX_TIMEOUT = 500; + private final int MAX_TIMEOUT = 250; + private final int SLEEP_TIME = 500; - public void run(WebSocket webSocket) + public void run(WebSocket webSocket, long pingTaskTime) { stop(); - thread = new Thread(() -> pingTask(webSocket)); + thread = new Thread(() -> pingTask(webSocket, pingTaskTime)); isRunning = true; thread.start(); } @@ -26,20 +26,18 @@ public class TikTokWebSocketPingingTask isRunning = false; } - - private void pingTask(WebSocket webSocket) + private void pingTask(WebSocket webSocket, long pingTaskTime) { var random = new Random(); while (isRunning) { try { if (!webSocket.isOpen()) { - Thread.sleep(100); + Thread.sleep(SLEEP_TIME); continue; } webSocket.sendPing(); - var timeout = random.nextInt(MAX_TIMEOUT)+MIN_TIMEOUT; - Thread.sleep(timeout); + Thread.sleep(pingTaskTime+random.nextInt(MAX_TIMEOUT)); } catch (Exception e) { isRunning = false; diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/CollectorExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CollectorExample.java index 98e52c4..c9634e3 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/CollectorExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CollectorExample.java @@ -24,6 +24,7 @@ package io.github.jwdeveloper.tiktok; import io.github.jwdeveloper.tiktok.extension.collector.TikTokLiveCollector; +import org.bson.Document; import java.io.IOException; import java.util.List; @@ -40,7 +41,7 @@ public class CollectorExample { public static void main(String[] args) throws IOException { - var collector = TikTokLiveCollector.use(settings -> + var collector = TikTokLiveCollector.useMongo(settings -> { settings.setConnectionUrl("mongodb+srv://" + mongoUser + ":" + mongoPassword + "@" + mongoDatabase + "/?retryWrites=true&w=majority"); settings.setDatabaseName("tiktok"); @@ -59,10 +60,10 @@ public class CollectorExample { { event.getException().printStackTrace(); }) - .addListener(collector.newListener(additionalDataFields, document -> + .addListener(collector.newListener(additionalDataFields, o -> { //filtering document data before it is inserted to database - if (document.get("dataType") == "message") { + if (o instanceof Document document && document.get("dataType") == "message") { return false; } return true; @@ -73,4 +74,4 @@ public class CollectorExample { System.in.read(); collector.disconnectDatabase(); } -} +} \ No newline at end of file diff --git a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/mongo/MongoDataCollectorSettings.java b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/mongo/MongoDataCollectorSettings.java index bdabb40..149e2b3 100644 --- a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/mongo/MongoDataCollectorSettings.java +++ b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/mongo/MongoDataCollectorSettings.java @@ -35,7 +35,7 @@ public class MongoDataCollectorSettings { private String sessionTag; - public void setConnectionUrl(Consumer consumer) { + public void setConnectionUrlConsumer(Consumer consumer) { var builder = new MongoDBConnectionStringBuilder(); consumer.accept(builder); connectionUrl = builder.build(); From 9ba049d37a098c139c3eba4e02c9c639a8bd4078 Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Thu, 29 Feb 2024 20:27:41 -0500 Subject: [PATCH 3/4] Fixed CollectorExample and removed useless @Setter in MongoDataCollectorSettings! --- .../io/github/jwdeveloper/tiktok/CollectorExample.java | 8 +++----- .../api/settings/mongo/MongoDataCollectorSettings.java | 1 - 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/CollectorExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CollectorExample.java index 1e26212..53a295f 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/CollectorExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CollectorExample.java @@ -24,11 +24,9 @@ package io.github.jwdeveloper.tiktok; import io.github.jwdeveloper.tiktok.extension.collector.TikTokLiveCollector; -import org.bson.Document; import java.io.IOException; -import java.util.List; -import java.util.Map; +import java.util.*; public class CollectorExample { @@ -59,10 +57,10 @@ public class CollectorExample { { event.getException().printStackTrace(); }) - .addListener(collector.newListener(additionalDataFields, o -> + .addListener(collector.newListener(additionalDataFields, document -> { //filtering document data before it is inserted to database - if (o instanceof Document document && document.get("dataType") == "message") { + if (document.get("dataType") == "message") { return false; } return true; diff --git a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/settings/mongo/MongoDataCollectorSettings.java b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/settings/mongo/MongoDataCollectorSettings.java index 3d319ab..bca2564 100644 --- a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/settings/mongo/MongoDataCollectorSettings.java +++ b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/settings/mongo/MongoDataCollectorSettings.java @@ -29,7 +29,6 @@ import java.util.function.Consumer; @Data public class MongoDataCollectorSettings { - @Setter private String connectionUrl; private String databaseName = "tiktok"; From ef90d4cd589037365bc6629a7621ba02a64f3c3b Mon Sep 17 00:00:00 2001 From: kohlerpop1 Date: Thu, 29 Feb 2024 20:38:05 -0500 Subject: [PATCH 4/4] Moved validation to TikTokLiveClientBuilder#validate! --- .../tiktok/data/settings/LiveClientSettings.java | 14 +++----------- .../tiktok/TikTokLiveClientBuilder.java | 3 +++ .../tiktok/websocket/TikTokWebSocketClient.java | 4 ++-- 3 files changed, 8 insertions(+), 13 deletions(-) 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 0567c89..0f141a9 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 @@ -86,18 +86,10 @@ public class LiveClientSettings { private HttpClientSettings httpSettings; /** - * Loop time in milliseconds between pings to TikTok - * @apiNote Min: 250 (0.25 seconds), Max: 30000 (30 seconds), Default: 5000 (5 seconds) + * Interval of time in milliseconds between pings to TikTok + * @apiNote Min: 250 (0.25 seconds), Default: 5000 (5 seconds) */ - private long pingTaskTime = 5000; - - public void setPingTaskTime(long pingTaskTime) { - if (pingTaskTime < 250) - throw new IllegalArgumentException("Minimum allowed value 250 millseconds"); - if (pingTaskTime > 30000) - throw new IllegalArgumentException("Maximum allowed value 30000 milliseconds"); - this.pingTaskTime = pingTaskTime; - } + private long pingInterval = 5000; /** * Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java index b4ffd82..e9db7f2 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -96,6 +96,9 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { if (clientSettings.getHostName().startsWith("@")) clientSettings.setHostName(clientSettings.getHostName().substring(1)); + if (clientSettings.getPingInterval() < 250) + throw new TikTokLiveException("Minimum allowed ping interval is 250 millseconds"); + var httpSettings = clientSettings.getHttpSettings(); httpSettings.getParams().put("app_language", clientSettings.getClientLanguage()); httpSettings.getParams().put("webcast_language", clientSettings.getClientLanguage()); 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 e0d1779..d1c8a62 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 @@ -82,7 +82,7 @@ public class TikTokWebSocketClient implements SocketClient { private void connectDefault() { try { webSocketClient.connect(); - pingingTask.run(webSocketClient, clientSettings.getPingTaskTime()); + pingingTask.run(webSocketClient, clientSettings.getPingInterval()); isConnected = true; } catch (Exception e) { isConnected = false; @@ -112,7 +112,7 @@ public class TikTokWebSocketClient implements SocketClient { proxySettings.remove(); continue; } - pingingTask.run(webSocketClient, clientSettings.getPingTaskTime()); + pingingTask.run(webSocketClient, clientSettings.getPingInterval()); isConnected = true; break; }