diff --git a/Client/pom.xml b/Client/pom.xml
index c0132a6..106631c 100644
--- a/Client/pom.xml
+++ b/Client/pom.xml
@@ -29,6 +29,23 @@
protobuf-java
3.24.1
+
+
+ org.slf4j
+ slf4j-simple
+ 2.0.7
+
+
+ org.java-websocket
+ Java-WebSocket
+ 1.5.4
+
+
+ org.slf4j
+ slf4j-simple
+ 2.0.7
+ runtime
+
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 3ae8f37..a4bb012 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java
@@ -70,7 +70,6 @@ public class TikTokLiveClientBuilder implements TikTokEventBuilder();
map.put("Cookie", cookie);
- return factory.openSocket()
- .subprotocols("echo-protocol")
- .connectTimeout(Duration.ofSeconds(15))
- .header("Cookie", cookie)
- .buildAsync(URI.create(url), new TikTokWebSocketListener(webResponseHandler, tikTokEventHandler, tikTokLiveClient)).get();
+
+ return new TikTokWebSocketListener(URI.create(url), map, 3000, webResponseHandler, tikTokEventHandler, tikTokLiveClient);
}
+
+
public void stop() {
- if (isConnected && webSocket != null) {
- webSocket.sendClose(WebSocket.NORMAL_CLOSURE, "ok");
+ if (isConnected && webSocketClient != null) {
+ webSocketClient.close();
}
}
}
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java
index c4db861..c59d5eb 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java
@@ -1,6 +1,5 @@
package io.github.jwdeveloper.tiktok.websocket;
-
import com.google.protobuf.ByteString;
import io.github.jwdeveloper.tiktok.TikTokLiveClient;
import io.github.jwdeveloper.tiktok.events.messages.TikTokConnectedEvent;
@@ -12,71 +11,71 @@ import io.github.jwdeveloper.tiktok.handlers.TikTokMessageHandlerRegistration;
import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
import io.github.jwdeveloper.tiktok.messages.WebcastWebsocketAck;
import io.github.jwdeveloper.tiktok.messages.WebcastWebsocketMessage;
+import org.java_websocket.client.WebSocketClient;
+import org.java_websocket.drafts.Draft_6455;
+import org.java_websocket.handshake.ServerHandshake;
-import java.io.ByteArrayOutputStream;
+import java.net.URI;
import java.net.http.WebSocket;
import java.nio.ByteBuffer;
+import java.util.Map;
import java.util.Optional;
-import java.util.concurrent.CompletionStage;
+public class TikTokWebSocketListener extends WebSocketClient {
-public class TikTokWebSocketListener implements java.net.http.WebSocket.Listener {
-
- private final ByteArrayOutputStream accumulatedData = new ByteArrayOutputStream();
private final TikTokMessageHandlerRegistration webResponseHandler;
private final TikTokEventHandler tikTokEventHandler;
private final TikTokLiveClient tikTokLiveClient;
- public TikTokWebSocketListener(TikTokMessageHandlerRegistration webResponseHandler,
+ public TikTokWebSocketListener(URI serverUri,
+ Map httpHeaders,
+ int connectTimeout,
+ TikTokMessageHandlerRegistration webResponseHandler,
TikTokEventHandler tikTokEventHandler,
TikTokLiveClient tikTokLiveClient) {
+ super(serverUri, new Draft_6455(), httpHeaders,connectTimeout);
this.webResponseHandler = webResponseHandler;
this.tikTokEventHandler = tikTokEventHandler;
this.tikTokLiveClient = tikTokLiveClient;
}
+
@Override
- public CompletionStage> onBinary(WebSocket webSocket, ByteBuffer data, boolean last) {
+ public void onOpen(ServerHandshake serverHandshake) {
+ tikTokEventHandler.publish(tikTokLiveClient,new TikTokConnectedEvent());
+ sendPing();
+ }
+
+
+ @Override
+ public void onMessage(ByteBuffer bytes)
+ {
try {
- var bytes = new byte[data.remaining()];
- data.get(bytes);
- accumulatedData.write(bytes);
- if (last) {
- handleBinary(webSocket, accumulatedData.toByteArray());
- accumulatedData.reset();
- }
+ handleBinary(bytes.array());
} catch (Exception e) {
tikTokEventHandler.publish(tikTokLiveClient, new TikTokErrorEvent(e));
}
- webSocket.request(1);
- return null;
+ sendPing();
}
@Override
- public void onOpen(java.net.http.WebSocket webSocket) {
- tikTokEventHandler.publish(tikTokLiveClient,new TikTokConnectedEvent());
- webSocket.request(1);
- }
-
- @Override
- public void onError(java.net.http.WebSocket webSocket, Throwable error) {
- tikTokEventHandler.publish(tikTokLiveClient,new TikTokErrorEvent(error));
- webSocket.request(1);
- }
-
- @Override
- public CompletionStage> onClose(java.net.http.WebSocket webSocket, int statusCode, String reason) {
+ public void onClose(int i, String s, boolean b) {
tikTokEventHandler.publish(tikTokLiveClient,new TikTokDisconnectedEvent());
- return java.net.http.WebSocket.Listener.super.onClose(webSocket, statusCode, reason);
}
- private void handleBinary(WebSocket webSocket, byte[] buffer) {
+ @Override
+ public void onError(Exception error) {
+ tikTokEventHandler.publish(tikTokLiveClient,new TikTokErrorEvent(error));
+ sendPing();
+ }
+
+ private void handleBinary(byte[] buffer) {
var websocketMessageOptional = getWebcastWebsocketMessage(buffer);
if (websocketMessageOptional.isEmpty()) {
return;
}
var websocketMessage = websocketMessageOptional.get();
- sendAckId(webSocket, websocketMessage.getId());
+ sendAckId(websocketMessage.getId());
var webResponse = getWebResponseMessage(websocketMessage.getBinary());
webResponseHandler.handle(tikTokLiveClient, webResponse);
@@ -114,13 +113,19 @@ public class TikTokWebSocketListener implements java.net.http.WebSocket.Listener
}
}
- private void sendAckId(WebSocket webSocket, long id) {
+ private void sendAckId(long id) {
var serverInfo = WebcastWebsocketAck
.newBuilder()
.setType("ack")
.setId(id)
.build();
- webSocket.sendBinary(serverInfo.toByteString().asReadOnlyByteBuffer(), true);
+ send(serverInfo.toByteString().asReadOnlyByteBuffer());
}
-}
\ No newline at end of file
+
+
+ @Override
+ public void onMessage(String s) {
+
+ }
+}
diff --git a/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java
index e552c55..a771308 100644
--- a/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java
+++ b/TestApplication/src/main/java/io/github/jwdeveloper/tiktok/Main.java
@@ -7,7 +7,7 @@ import java.io.IOException;
public class Main {
- public static String TEST_TIKTOK_USER = "vadimpyrography";
+ public static String TEST_TIKTOK_USER = "dmikl_";
public static void main(String[] args) throws IOException {
var client = TikTokLive.newClient(TEST_TIKTOK_USER)
diff --git a/pom.xml b/pom.xml
index 22080bc..3abcc0e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,6 +54,7 @@
true
all
+ false
true
@@ -64,8 +65,6 @@
*:*
- **/proto/**
- **/google/**
**/tiktokSchema.proto/**
@@ -99,6 +98,8 @@
test
+
+