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:
@@ -72,12 +72,7 @@
|
|||||||
<version>1.18.22</version>
|
<version>1.18.22</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</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 -->
|
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.code.gson</groupId>
|
<groupId>com.google.code.gson</groupId>
|
||||||
@@ -93,18 +88,6 @@
|
|||||||
</dependency>
|
</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>
|
<dependency>
|
||||||
@@ -119,6 +102,12 @@
|
|||||||
<version>RELEASE</version>
|
<version>RELEASE</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>API</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
@@ -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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package io.github.jwdeveloper.tiktok.websocket;
|
package io.github.jwdeveloper.tiktok.websocket;
|
||||||
|
|
||||||
|
import com.google.protobuf.ByteString;
|
||||||
import io.github.jwdeveloper.generated.WebcastMessageEvent;
|
import io.github.jwdeveloper.generated.WebcastMessageEvent;
|
||||||
import io.github.jwdeveloper.generated.WebcastResponse;
|
import io.github.jwdeveloper.generated.WebcastResponse;
|
||||||
import io.github.jwdeveloper.generated.WebcastWebsocketAck;
|
import io.github.jwdeveloper.generated.WebcastWebsocketAck;
|
||||||
@@ -9,6 +10,7 @@ import io.github.jwdeveloper.tiktok.TikTokLiveException;
|
|||||||
import java.net.http.WebSocket;
|
import java.net.http.WebSocket;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Base64;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.CompletionStage;
|
import java.util.concurrent.CompletionStage;
|
||||||
@@ -21,7 +23,7 @@ public class TikTokWebSocketListener implements java.net.http.WebSocket.Listener
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletionStage<?> onBinary(WebSocket webSocket, ByteBuffer data, boolean last) {
|
public CompletionStage<?> onBinary(WebSocket webSocket, ByteBuffer data, boolean last) {
|
||||||
System.out.println("Received onBinary: " + data + " " + last);
|
System.out.println("Received onBinary: " + data + " " + last);
|
||||||
parts.add(data);
|
parts.add(data);
|
||||||
webSocket.request(1);
|
webSocket.request(1);
|
||||||
if (last) {
|
if (last) {
|
||||||
@@ -50,15 +52,17 @@ public class TikTokWebSocketListener implements java.net.http.WebSocket.Listener
|
|||||||
|
|
||||||
private void handleBinary(WebSocket webSocket, ByteBuffer buffer) {
|
private void handleBinary(WebSocket webSocket, ByteBuffer buffer) {
|
||||||
try {
|
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())
|
if(websocketMessage.getBinary().isEmpty())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// System.out.println(websocketMessage.getBinary());
|
|
||||||
try {
|
try {
|
||||||
var response = WebcastResponse.parseFrom(websocketMessage.getBinary());
|
var response = WebcastResponse.parseFrom(websocketMessage.getBinary());
|
||||||
|
|
||||||
var serverInfo = WebcastWebsocketAck
|
var serverInfo = WebcastWebsocketAck
|
||||||
.newBuilder()
|
.newBuilder()
|
||||||
.setType("ack")
|
.setType("ack")
|
||||||
@@ -69,13 +73,14 @@ public class TikTokWebSocketListener implements java.net.http.WebSocket.Listener
|
|||||||
System.out.println("Works");
|
System.out.println("Works");
|
||||||
// handleResponse(response);
|
// handleResponse(response);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// throw new TikTokLiveException("Unabel to read WebcastResponse");
|
throw new TikTokLiveException("Unabel to read WebcastResponse",e);
|
||||||
System.out.println("Unable to read WebcastResponse");
|
// System.out.println("Unable to read WebcastResponse");
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
||||||
System.out.println("Unable to read WebcastWebsocketMessage");
|
// System.out.println("Unable to read WebcastWebsocketMessage");
|
||||||
//throw new TikTokLiveException("Unabel to read WebcastWebsocketMessage");
|
e.printStackTrace();
|
||||||
|
throw new TikTokLiveException("Unabel to read WebcastWebsocketMessage",e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -85,11 +85,7 @@ public class TikTokWebsocketClient {
|
|||||||
var map = new HashMap<String, String>();
|
var map = new HashMap<String, String>();
|
||||||
map.put("Cookie", cookie);
|
map.put("Cookie", cookie);
|
||||||
|
|
||||||
|
var ws = factory.openSocket()
|
||||||
// System.in.read();
|
|
||||||
//var cluent2 = new Client2(URI.create(url), map);
|
|
||||||
var builder = HttpClient.newHttpClient().newWebSocketBuilder();
|
|
||||||
var ws = builder
|
|
||||||
.subprotocols("echo-protocol")
|
.subprotocols("echo-protocol")
|
||||||
.connectTimeout(Duration.ofSeconds(15))
|
.connectTimeout(Duration.ofSeconds(15))
|
||||||
.header("Cookie", cookie)
|
.header("Cookie", cookie)
|
||||||
@@ -101,7 +97,7 @@ public class TikTokWebsocketClient {
|
|||||||
byte[] message = new byte[]{58, 2, 104, 98};
|
byte[] message = new byte[]{58, 2, 104, 98};
|
||||||
ByteBuffer buffer = ByteBuffer.wrap(message);
|
ByteBuffer buffer = ByteBuffer.wrap(message);
|
||||||
while (buffer.hasRemaining()) {
|
while (buffer.hasRemaining()) {
|
||||||
ws.sendPing(buffer).get();
|
ws.sendPing(buffer);
|
||||||
}
|
}
|
||||||
buffer.clear();
|
buffer.clear();
|
||||||
Thread.sleep(10);
|
Thread.sleep(10);
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import java.io.IOException;
|
|||||||
|
|
||||||
public class TikTokLiveTest
|
public class TikTokLiveTest
|
||||||
{
|
{
|
||||||
public static String TEST_USER_SUBJECT = "erwin_winki";
|
public static String TEST_USER_SUBJECT = "live_interactive_";
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
package io.github.jwdeveloper.tiktok.http;
|
package io.github.jwdeveloper.tiktok.http;
|
||||||
|
|
||||||
import com.google.gson.JsonParser;
|
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 org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|||||||
Reference in New Issue
Block a user