mirror of
https://github.com/jwdeveloper/TikTokLiveJava.git
synced 2026-02-27 08:49:40 -05:00
Implemeting tiktok ws handling
This commit is contained in:
@@ -1,20 +1,106 @@
|
||||
package io.github.jwdeveloper.tiktok.websocket;
|
||||
|
||||
import io.github.jwdeveloper.generated.WebcastMessageEvent;
|
||||
import io.github.jwdeveloper.generated.WebcastResponse;
|
||||
import io.github.jwdeveloper.generated.WebcastWebsocketAck;
|
||||
import io.github.jwdeveloper.generated.WebcastWebsocketMessage;
|
||||
import io.github.jwdeveloper.tiktok.TikTokLiveException;
|
||||
|
||||
import java.net.http.WebSocket;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.CompletionStage;
|
||||
|
||||
|
||||
public class TikTokWebSocketListener implements java.net.http.WebSocket.Listener {
|
||||
|
||||
List<ByteBuffer> parts = new ArrayList<>();
|
||||
CompletableFuture<?> accumulatedMessage = new CompletableFuture<>();
|
||||
|
||||
@Override
|
||||
public CompletionStage<?> onBinary(WebSocket webSocket, ByteBuffer data, boolean last) {
|
||||
System.out.println("Received onBinary: " + data + " " + last);
|
||||
parts.add(data);
|
||||
webSocket.request(1);
|
||||
if (last) {
|
||||
var buffer = combineBuffer(parts);
|
||||
accumulatedMessage.complete(null);
|
||||
CompletionStage<?> cf = accumulatedMessage;
|
||||
accumulatedMessage = new CompletableFuture<>();
|
||||
handleBinary(webSocket, buffer);
|
||||
parts = new ArrayList<>();
|
||||
return cf;
|
||||
}
|
||||
return accumulatedMessage;
|
||||
}
|
||||
|
||||
|
||||
public ByteBuffer combineBuffer(List<ByteBuffer> buffers) {
|
||||
int totalCapacity = buffers.stream().mapToInt(ByteBuffer::remaining).sum();
|
||||
ByteBuffer combined = ByteBuffer.allocate(totalCapacity);
|
||||
for (ByteBuffer buffer : buffers) {
|
||||
combined.put(buffer);
|
||||
}
|
||||
combined.flip();
|
||||
return combined;
|
||||
}
|
||||
|
||||
|
||||
private void handleBinary(WebSocket webSocket, ByteBuffer buffer) {
|
||||
try {
|
||||
WebcastWebsocketMessage websocketMessage = WebcastWebsocketMessage.parseFrom(buffer);
|
||||
|
||||
if(websocketMessage.getBinary().isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
// System.out.println(websocketMessage.getBinary());
|
||||
try {
|
||||
var response = WebcastResponse.parseFrom(websocketMessage.getBinary());
|
||||
var serverInfo = WebcastWebsocketAck
|
||||
.newBuilder()
|
||||
.setType("ack")
|
||||
.setId(websocketMessage.getId())
|
||||
.build();
|
||||
webSocket.sendBinary(serverInfo.toByteString().asReadOnlyByteBuffer(), true);
|
||||
|
||||
System.out.println("Works");
|
||||
// handleResponse(response);
|
||||
} catch (Exception e) {
|
||||
// throw new TikTokLiveException("Unabel to read WebcastResponse");
|
||||
System.out.println("Unable to read WebcastResponse");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
||||
System.out.println("Unable to read WebcastWebsocketMessage");
|
||||
//throw new TikTokLiveException("Unabel to read WebcastWebsocketMessage");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void handleResponse(WebcastResponse webcastResponse) {
|
||||
System.out.println("Handling response: Messages"+webcastResponse.getMessagesList().size());
|
||||
|
||||
for(var message : webcastResponse.getMessagesList())
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onOpen(java.net.http.WebSocket webSocket) {
|
||||
System.out.println("WebSocket opened");
|
||||
webSocket.request(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(java.net.http.WebSocket webSocket, Throwable error) {
|
||||
System.out.println("Error occurred: " + error.getMessage());
|
||||
webSocket.request(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -23,27 +109,11 @@ public class TikTokWebSocketListener implements java.net.http.WebSocket.Listene
|
||||
return java.net.http.WebSocket.Listener.super.onText(webSocket, data, last);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletionStage<?> onPing(WebSocket webSocket, ByteBuffer message) {
|
||||
System.out.println("Received onPing: " );
|
||||
return java.net.http.WebSocket.Listener.super.onPing(webSocket, message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletionStage<?> onBinary(WebSocket webSocket, ByteBuffer data, boolean last) {
|
||||
System.out.println("Received onBinary: " + data);
|
||||
return java.net.http.WebSocket.Listener.super.onBinary(webSocket, data, last);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletionStage<?> onClose(java.net.http.WebSocket webSocket, int statusCode, String reason) {
|
||||
System.out.println("WebSocket closed with status code: " + statusCode + " and reason: " + reason);
|
||||
return java.net.http.WebSocket.Listener.super.onClose(webSocket, statusCode, reason);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletionStage<?> onPong(WebSocket webSocket, ByteBuffer message) {
|
||||
System.out.println("Received onPong: ");
|
||||
return java.net.http.WebSocket.Listener.super.onPong(webSocket,message);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -79,12 +79,14 @@ public class TikTokWebsocketClient {
|
||||
public void startWS(String url) {
|
||||
try {
|
||||
var cookie = tikTokCookieJar.parseCookies();
|
||||
logger.info("WssIP: " + url);
|
||||
logger.info("Cookie: " + cookie);
|
||||
System.out.println("WssIP: " + url);
|
||||
System.out.println("Cookie: " + cookie);
|
||||
|
||||
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
|
||||
@@ -95,12 +97,11 @@ public class TikTokWebsocketClient {
|
||||
|
||||
|
||||
|
||||
var i =0;
|
||||
while (true) {
|
||||
byte[] message = new byte[]{58, 2, 104, 98};
|
||||
ByteBuffer buffer = ByteBuffer.wrap(message);
|
||||
while (buffer.hasRemaining()) {
|
||||
ws.sendPing(buffer);
|
||||
ws.sendPing(buffer).get();
|
||||
}
|
||||
buffer.clear();
|
||||
Thread.sleep(10);
|
||||
|
||||
Reference in New Issue
Block a user