diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java index 239d89e..962c05b 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java @@ -51,9 +51,17 @@ public interface LiveClient { /** * Disconnects the connection. + * @param type + *

0 - Normal - Initiates disconnection and returns + *

1 - Disconnects blocking and returns after closure + *

2 - Disconnects and kills connection to websocket + *

Default {@link #disconnect()} is 0 */ - void disconnect(); + void disconnect(int type); + default void disconnect() { + disconnect(0); + } /** * Use to manually invoke event diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/websocket/LiveSocketClient.java b/API/src/main/java/io/github/jwdeveloper/tiktok/websocket/LiveSocketClient.java index 136d95d..f04e8b5 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/websocket/LiveSocketClient.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/websocket/LiveSocketClient.java @@ -27,6 +27,6 @@ import io.github.jwdeveloper.tiktok.live.LiveClient; public interface LiveSocketClient { void start(LiveConnectionData.Response webcastResponse, LiveClient tikTokLiveClient); - void stop(); + void stop(int type); boolean isConnected(); } \ No newline at end of file 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 01f50ce..074723e 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java @@ -153,9 +153,9 @@ public class TikTokLiveClient implements LiveClient tikTokEventHandler.publish(this, new TikTokRoomInfoEvent(roomInfo)); } - public void disconnect() { + public void disconnect(int type) { if (webSocketClient.isConnected()) - webSocketClient.stop(); + webSocketClient.stop(type); if (!roomInfo.hasConnectionState(ConnectionState.DISCONNECTED)) setState(ConnectionState.DISCONNECTED); } 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 61b67f3..71fd9a6 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java @@ -199,6 +199,8 @@ public class TikTokLiveHttpClient implements LiveHttpClient .withParam("client", "ttlive-java") .withParam("room_id", room_id); + if (clientSettings.getSessionId() != null) // Allows receiving of all comments and Subscribe Events + builder.withParam("session_id", clientSettings.getSessionId()); if (clientSettings.getApiKey() != null) builder.withParam("apiKey", clientSettings.getApiKey()); 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 7dba5db..498acf3 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 @@ -28,6 +28,7 @@ import io.github.jwdeveloper.tiktok.data.settings.*; import io.github.jwdeveloper.tiktok.exceptions.*; import io.github.jwdeveloper.tiktok.live.*; import org.java_websocket.client.WebSocketClient; +import org.java_websocket.framing.CloseFrame; import javax.net.ssl.*; import java.net.Proxy; @@ -56,18 +57,18 @@ public class TikTokWebSocketClient implements LiveSocketClient { @Override public void start(LiveConnectionData.Response connectionData, LiveClient liveClient) { if (isConnected()) - stop(); + stop(0); messageHandler.handle(liveClient, connectionData.getWebcastResponse()); var headers = new HashMap<>(clientSettings.getHttpSettings().getHeaders()); headers.put("Cookie", connectionData.getWebsocketCookies()); webSocketClient = new TikTokWebSocketListener(connectionData.getWebsocketUrl(), - headers, - clientSettings.getHttpSettings().getTimeout().toMillisPart(), - messageHandler, - tikTokEventHandler, - liveClient); + headers, + clientSettings.getHttpSettings().getTimeout().toMillisPart(), + messageHandler, + tikTokEventHandler, + liveClient); ProxyClientSettings proxyClientSettings = clientSettings.getHttpSettings().getProxyClientSettings(); if (proxyClientSettings.isEnabled() && proxyClientSettings.isAllowWebsocket()) @@ -128,9 +129,19 @@ public class TikTokWebSocketClient implements LiveSocketClient { } } - public void stop() { + public void stop(int type) { if (isConnected()) { - webSocketClient.close(); + switch (type) { + case 1 -> { + try { + webSocketClient.closeBlocking(); + } catch (InterruptedException e) { + throw new TikTokLiveException("Failed to stop the websocket"); + } + } + case 2 -> webSocketClient.closeConnection(CloseFrame.NORMAL, ""); + default -> webSocketClient.close(); + } heartbeatTask.stop(); } webSocketClient = null; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java index 2ff067e..f7cbdc8 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java @@ -44,7 +44,7 @@ public class TikTokWebSocketOfflineClient implements LiveSocketClient { } @Override - public void stop() { + public void stop(int type) { if (liveClient != null) handler.publish(liveClient, new TikTokDisconnectedEvent("Stopping")); }