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 c0ce8a4..a30ff85 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 @@ -24,6 +24,7 @@ package io.github.jwdeveloper.tiktok.live; import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; import io.github.jwdeveloper.tiktok.listener.ListenersManager; +import io.github.jwdeveloper.tiktok.websocket.LiveClientStopType; import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; @@ -49,16 +50,16 @@ 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
+ * @param type {@code LiveClientStopType}
+ * @see LiveClientStopType
*/
- void disconnect(int type);
+ void disconnect(LiveClientStopType type);
+ /**
+ * Disconnects with {@link LiveClientStopType#NORMAL}
+ */
default void disconnect() {
- disconnect(0);
+ disconnect(LiveClientStopType.NORMAL);
}
/**
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/websocket/LiveClientStopType.java b/API/src/main/java/io/github/jwdeveloper/tiktok/websocket/LiveClientStopType.java
new file mode 100644
index 0000000..0cb78b9
--- /dev/null
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/websocket/LiveClientStopType.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2023-2024 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package io.github.jwdeveloper.tiktok.websocket;
+
+public enum LiveClientStopType
+{
+ /**
+ * Initiates the websocket close handshake. This method does not block
In oder to make sure
+ * the connection is closed use {@link LiveClientStopType#CLOSE_BLOCKING}
+ */
+ NORMAL,
+ /**
+ * Same as {@link LiveClientStopType#NORMAL} but blocks until the websocket closed or failed to do so.
+ *
+ * @apiNote Can throw {@link InterruptedException} when/if the threads get interrupted
+ */
+ CLOSE_BLOCKING,
+ /**
+ * This will close the connection immediately without a proper close handshake.
+ * The code and the message therefore won't be transferred over the wire also they will be forwarded to onClose/onWebsocketClose. */
+ DISCONNECT
+}
\ No newline at end of file
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 f04e8b5..9f09edf 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(int type);
+ void stop(LiveClientStopType 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 e06102f..01b0f09 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java
@@ -35,7 +35,7 @@ import io.github.jwdeveloper.tiktok.listener.ListenersManager;
import io.github.jwdeveloper.tiktok.live.*;
import io.github.jwdeveloper.tiktok.messages.webcast.ProtoMessageFetchResult;
import io.github.jwdeveloper.tiktok.models.ConnectionState;
-import io.github.jwdeveloper.tiktok.websocket.LiveSocketClient;
+import io.github.jwdeveloper.tiktok.websocket.*;
import lombok.Getter;
import java.util.Base64;
@@ -166,7 +166,7 @@ public class TikTokLiveClient implements LiveClient
tikTokEventHandler.publish(this, new TikTokRoomInfoEvent(roomInfo));
}
- public void disconnect(int type) {
+ public void disconnect(LiveClientStopType type) {
if (webSocketClient.isConnected())
webSocketClient.stop(type);
if (!roomInfo.hasConnectionState(ConnectionState.DISCONNECTED))
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 dc1c35e..6a2fc60 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
@@ -57,7 +57,7 @@ public class TikTokWebSocketClient implements LiveSocketClient {
@Override
public void start(LiveConnectionData.Response connectionData, LiveClient liveClient) {
if (isConnected())
- stop(0);
+ stop(LiveClientStopType.NORMAL);
messageHandler.handle(liveClient, connectionData.getWebcastResponse());
@@ -129,17 +129,17 @@ public class TikTokWebSocketClient implements LiveSocketClient {
}
}
- public void stop(int type) {
+ public void stop(LiveClientStopType type) {
if (isConnected()) {
switch (type) {
- case 1 -> {
+ case CLOSE_BLOCKING -> {
try {
webSocketClient.closeBlocking();
} catch (InterruptedException e) {
throw new TikTokLiveException("Failed to stop the websocket");
}
}
- case 2 -> webSocketClient.closeConnection(CloseFrame.NORMAL, "");
+ case DISCONNECT -> webSocketClient.closeConnection(CloseFrame.NORMAL, "");
default -> webSocketClient.close();
}
heartbeatTask.stop(webSocketClient);
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 f7cbdc8..3a73760 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(int type) {
+ public void stop(LiveClientStopType type) {
if (liveClient != null)
handler.publish(liveClient, new TikTokDisconnectedEvent("Stopping"));
}
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/euler/TikTokWebSocketEulerClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/euler/TikTokWebSocketEulerClient.java
index 115e566..667dbf5 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/euler/TikTokWebSocketEulerClient.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/euler/TikTokWebSocketEulerClient.java
@@ -23,14 +23,14 @@
package io.github.jwdeveloper.tiktok.websocket.euler;
import io.github.jwdeveloper.tiktok.data.requests.LiveConnectionData;
-import io.github.jwdeveloper.tiktok.data.settings.*;
-import io.github.jwdeveloper.tiktok.exceptions.*;
+import io.github.jwdeveloper.tiktok.data.settings.LiveClientSettings;
+import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
import io.github.jwdeveloper.tiktok.live.*;
import io.github.jwdeveloper.tiktok.websocket.*;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.framing.CloseFrame;
-import java.net.*;
+import java.net.URI;
import java.util.HashMap;
public class TikTokWebSocketEulerClient implements LiveSocketClient {
@@ -53,7 +53,7 @@ public class TikTokWebSocketEulerClient implements LiveSocketClient {
@Override
public void start(LiveConnectionData.Response connectionData, LiveClient liveClient) {
if (isConnected())
- stop(0);
+ stop(LiveClientStopType.NORMAL);
webSocketClient = new TikTokWebSocketEulerListener(
URI.create("wss://ws.eulerstream.com?uniqueId=%s&apiKey=%s&features.rawMessages=true".formatted(liveClient.getRoomInfo().getHostName(), clientSettings.getApiKey())),
@@ -74,17 +74,17 @@ public class TikTokWebSocketEulerClient implements LiveSocketClient {
}
}
- public void stop(int type) {
+ public void stop(LiveClientStopType type) {
if (isConnected()) {
switch (type) {
- case 1 -> {
+ case CLOSE_BLOCKING -> {
try {
webSocketClient.closeBlocking();
} catch (InterruptedException e) {
throw new TikTokLiveException("Failed to stop the websocket");
}
}
- case 2 -> webSocketClient.closeConnection(CloseFrame.NORMAL, "");
+ case DISCONNECT -> webSocketClient.closeConnection(CloseFrame.NORMAL, "");
default -> webSocketClient.close();
}
}