Implemeting tiktok ws handling

This commit is contained in:
JW
2023-08-07 19:41:56 +02:00
parent 542c57616d
commit 59befcd6f9
6 changed files with 23 additions and 74 deletions

View File

@@ -72,12 +72,7 @@
<version>1.18.22</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>API</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
@@ -93,18 +88,6 @@
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.7</version>
<scope>runtime</scope>
</dependency>
<dependency>
@@ -119,6 +102,12 @@
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>API</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@@ -1,40 +0,0 @@
package io.github.jwdeveloper.tiktok.websocket;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import java.net.URI;
import java.nio.ByteBuffer;
import java.util.Map;
public class Client2 extends WebSocketClient {
public Client2(URI serverUri, Map<String, String> httpHeaders) {
super(serverUri,httpHeaders);
}
@Override
public void onOpen(ServerHandshake serverHandshake) {
System.out.println("Open");
}
@Override
public void onMessage(String s) {
System.out.println("MESSAGE");
}
@Override
public void onMessage(ByteBuffer bytes) {
System.out.println("MESSAGE binary");
}
@Override
public void onClose(int i, String s, boolean b) {
System.out.println("Close");
}
@Override
public void onError(Exception e) {
System.out.println("Error");
}
}

View File

@@ -1,5 +1,6 @@
package io.github.jwdeveloper.tiktok.websocket;
import com.google.protobuf.ByteString;
import io.github.jwdeveloper.generated.WebcastMessageEvent;
import io.github.jwdeveloper.generated.WebcastResponse;
import io.github.jwdeveloper.generated.WebcastWebsocketAck;
@@ -9,6 +10,7 @@ import io.github.jwdeveloper.tiktok.TikTokLiveException;
import java.net.http.WebSocket;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
@@ -50,15 +52,17 @@ public class TikTokWebSocketListener implements java.net.http.WebSocket.Listener
private void handleBinary(WebSocket webSocket, ByteBuffer buffer) {
try {
WebcastWebsocketMessage websocketMessage = WebcastWebsocketMessage.parseFrom(buffer);
// buffer= Base64.getEncoder().encode(buffer);
ByteString byteString = ByteString.copyFrom(buffer);
WebcastWebsocketMessage websocketMessage = WebcastWebsocketMessage.parseFrom(byteString);
if(websocketMessage.getBinary().isEmpty())
{
return;
}
// System.out.println(websocketMessage.getBinary());
try {
var response = WebcastResponse.parseFrom(websocketMessage.getBinary());
var serverInfo = WebcastWebsocketAck
.newBuilder()
.setType("ack")
@@ -69,13 +73,14 @@ public class TikTokWebSocketListener implements java.net.http.WebSocket.Listener
System.out.println("Works");
// handleResponse(response);
} catch (Exception e) {
// throw new TikTokLiveException("Unabel to read WebcastResponse");
System.out.println("Unable to read WebcastResponse");
throw new TikTokLiveException("Unabel to read WebcastResponse",e);
// System.out.println("Unable to read WebcastResponse");
}
} catch (Exception e) {
System.out.println("Unable to read WebcastWebsocketMessage");
//throw new TikTokLiveException("Unabel to read WebcastWebsocketMessage");
// System.out.println("Unable to read WebcastWebsocketMessage");
e.printStackTrace();
throw new TikTokLiveException("Unabel to read WebcastWebsocketMessage",e);
}
}

View File

@@ -85,11 +85,7 @@ public class TikTokWebsocketClient {
var map = new HashMap<String, String>();
map.put("Cookie", cookie);
// System.in.read();
//var cluent2 = new Client2(URI.create(url), map);
var builder = HttpClient.newHttpClient().newWebSocketBuilder();
var ws = builder
var ws = factory.openSocket()
.subprotocols("echo-protocol")
.connectTimeout(Duration.ofSeconds(15))
.header("Cookie", cookie)
@@ -101,7 +97,7 @@ public class TikTokWebsocketClient {
byte[] message = new byte[]{58, 2, 104, 98};
ByteBuffer buffer = ByteBuffer.wrap(message);
while (buffer.hasRemaining()) {
ws.sendPing(buffer).get();
ws.sendPing(buffer);
}
buffer.clear();
Thread.sleep(10);

View File

@@ -6,7 +6,7 @@ import java.io.IOException;
public class TikTokLiveTest
{
public static String TEST_USER_SUBJECT = "erwin_winki";
public static String TEST_USER_SUBJECT = "live_interactive_";
@Test

View File

@@ -1,8 +1,7 @@
package io.github.jwdeveloper.tiktok.http;
import com.google.gson.JsonParser;
import io.github.jwdeveloper.tiktok.live.models.gift.TikTokGift;
import org.java_websocket.WebSocket;
import org.junit.jupiter.api.Test;
import java.io.IOException;