mirror of
https://github.com/jwdeveloper/TikTokLiveJava.git
synced 2026-02-27 16:59:39 -05:00
- improve collector
This commit is contained in:
@@ -0,0 +1,8 @@
|
|||||||
|
package io.github.jwdeveloper.tiktok.extension.collector.api;
|
||||||
|
|
||||||
|
import io.github.jwdeveloper.tiktok.live.LiveClient;
|
||||||
|
import org.bson.Document;
|
||||||
|
|
||||||
|
public interface CollectorEvent {
|
||||||
|
boolean execute(LiveClient client, Document document);
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package io.github.jwdeveloper.tiktok.extension.collector.api.settings;
|
package io.github.jwdeveloper.tiktok.extension.collector.api.settings;
|
||||||
|
|
||||||
|
import io.github.jwdeveloper.tiktok.extension.collector.api.CollectorEvent;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
|
||||||
@@ -9,5 +10,5 @@ import java.util.function.Function;
|
|||||||
@Data
|
@Data
|
||||||
public class CollectorListenerSettings {
|
public class CollectorListenerSettings {
|
||||||
private Map<String, Object> extraFields;
|
private Map<String, Object> extraFields;
|
||||||
private Function<Document, Boolean> filter;
|
private CollectorEvent filter;
|
||||||
}
|
}
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
package io.github.jwdeveloper.tiktok.extension.collector.impl;
|
package io.github.jwdeveloper.tiktok.extension.collector.impl;
|
||||||
|
|
||||||
|
import io.github.jwdeveloper.tiktok.extension.collector.api.CollectorEvent;
|
||||||
import io.github.jwdeveloper.tiktok.extension.collector.api.Storage;
|
import io.github.jwdeveloper.tiktok.extension.collector.api.Storage;
|
||||||
import io.github.jwdeveloper.tiktok.extension.collector.api.settings.CollectorListenerSettings;
|
import io.github.jwdeveloper.tiktok.extension.collector.api.settings.CollectorListenerSettings;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
@@ -40,6 +41,7 @@ public class DataCollector {
|
|||||||
public void connect() {
|
public void connect() {
|
||||||
storage.connect();
|
storage.connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void disconnect() {
|
public void disconnect() {
|
||||||
storage.disconnect();
|
storage.disconnect();
|
||||||
}
|
}
|
||||||
@@ -49,11 +51,11 @@ public class DataCollector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public DataCollectorListener newListener(Map<String, Object> additionalFields) {
|
public DataCollectorListener newListener(Map<String, Object> additionalFields) {
|
||||||
return newListener(additionalFields, (e) -> true);
|
return newListener(additionalFields, (live, document) -> true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DataCollectorListener newListener(Map<String, Object> additionalFields,
|
public DataCollectorListener newListener(Map<String, Object> additionalFields,
|
||||||
Function<Document, Boolean> filter) {
|
CollectorEvent filter) {
|
||||||
var settings = new CollectorListenerSettings();
|
var settings = new CollectorListenerSettings();
|
||||||
settings.setExtraFields(additionalFields);
|
settings.setExtraFields(additionalFields);
|
||||||
settings.setFilter(filter);
|
settings.setFilter(filter);
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ import org.bson.Document;
|
|||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.UUID;
|
import java.util.Date;
|
||||||
|
|
||||||
public class DataCollectorListener implements LiveDataCollector {
|
public class DataCollectorListener implements LiveDataCollector {
|
||||||
|
|
||||||
private final Storage storage;
|
private final Storage storage;
|
||||||
private final CollectorListenerSettings settings;
|
private final CollectorListenerSettings settings;
|
||||||
private String sessionId;
|
private String roomId;
|
||||||
private String userName;
|
private String userName;
|
||||||
|
|
||||||
public DataCollectorListener(Storage collection, CollectorListenerSettings settings) {
|
public DataCollectorListener(Storage collection, CollectorListenerSettings settings) {
|
||||||
@@ -41,44 +41,42 @@ public class DataCollectorListener implements LiveDataCollector {
|
|||||||
@TikTokEventObserver
|
@TikTokEventObserver
|
||||||
private void onEvent(LiveClient liveClient, TikTokEvent event) {
|
private void onEvent(LiveClient liveClient, TikTokEvent event) {
|
||||||
if (event instanceof TikTokConnectingEvent) {
|
if (event instanceof TikTokConnectingEvent) {
|
||||||
sessionId = UUID.randomUUID().toString();
|
|
||||||
userName = liveClient.getRoomInfo().getHostName();
|
userName = liveClient.getRoomInfo().getHostName();
|
||||||
|
roomId = liveClient.getRoomInfo().getRoomId();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event instanceof TikTokErrorEvent) {
|
if (event instanceof TikTokErrorEvent) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
includeEvent(event);
|
includeEvent(liveClient, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TikTokEventObserver
|
@TikTokEventObserver
|
||||||
private void onError(LiveClient liveClient, TikTokErrorEvent event) {
|
private void onError(LiveClient liveClient, TikTokErrorEvent event) {
|
||||||
event.getException().printStackTrace();
|
event.getException().printStackTrace();
|
||||||
includeError(event);
|
includeError(liveClient, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void includeResponse(LiveClient liveClient, WebcastResponse message) {
|
private void includeResponse(LiveClient liveClient, WebcastResponse message) {
|
||||||
var messageContent = Base64.getEncoder().encodeToString(message.toByteArray());
|
var messageContent = Base64.getEncoder().encodeToString(message.toByteArray());
|
||||||
insertDocument(createDocument("response", "webcast", messageContent));
|
insertDocument(liveClient, createDocument("response", "webcast", messageContent));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void includeMessage(LiveClient liveClient, WebcastResponse.Message message) {
|
private void includeMessage(LiveClient liveClient, WebcastResponse.Message message) {
|
||||||
var method = message.getMethod();
|
var method = message.getMethod();
|
||||||
var messageContent = Base64.getEncoder().encodeToString(message.getPayload().toByteArray());
|
var messageContent = Base64.getEncoder().encodeToString(message.getPayload().toByteArray());
|
||||||
|
insertDocument(liveClient, createDocument("message", method, messageContent));
|
||||||
insertDocument(createDocument("message", method, messageContent));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void includeEvent(TikTokEvent event) {
|
private void includeEvent(LiveClient client, TikTokEvent event) {
|
||||||
var json = JsonUtil.toJson(event);
|
var json = JsonUtil.toJson(event);
|
||||||
var content = Base64.getEncoder().encodeToString(json.getBytes());
|
var content = Base64.getEncoder().encodeToString(json.getBytes());
|
||||||
var name = event.getClass().getSimpleName();
|
var name = event.getClass().getSimpleName();
|
||||||
insertDocument(createDocument("event", name, content));
|
insertDocument(client, createDocument("event", name, content));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void includeError(TikTokErrorEvent event) {
|
private void includeError(LiveClient client, TikTokErrorEvent event) {
|
||||||
var exception = event.getException();
|
var exception = event.getException();
|
||||||
var exceptionName = event.getException().getClass().getSimpleName();
|
var exceptionName = event.getException().getClass().getSimpleName();
|
||||||
|
|
||||||
@@ -86,18 +84,18 @@ public class DataCollectorListener implements LiveDataCollector {
|
|||||||
var pw = new PrintWriter(sw);
|
var pw = new PrintWriter(sw);
|
||||||
event.getException().printStackTrace(pw);
|
event.getException().printStackTrace(pw);
|
||||||
var content = sw.toString();
|
var content = sw.toString();
|
||||||
|
var contentBase64 = Base64.getEncoder().encodeToString(content.getBytes());
|
||||||
var doc = createDocument("error", exceptionName, content);
|
var doc = createDocument("error", exceptionName, contentBase64);
|
||||||
if (exception instanceof TikTokLiveMessageException ex) {
|
if (exception instanceof TikTokLiveMessageException ex) {
|
||||||
doc.append("message", ex.messageToBase64())
|
doc.append("message", ex.messageToBase64())
|
||||||
.append("response", ex.webcastResponseToBase64());
|
.append("response", ex.webcastResponseToBase64());
|
||||||
}
|
}
|
||||||
insertDocument(doc);
|
insertDocument(client, doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void insertDocument(Document document) {
|
private void insertDocument(LiveClient client, Document document) {
|
||||||
if (!settings.getFilter().apply(document)) {
|
if (!settings.getFilter().execute(client, document)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
storage.insert(document);
|
storage.insert(document);
|
||||||
@@ -106,7 +104,7 @@ public class DataCollectorListener implements LiveDataCollector {
|
|||||||
|
|
||||||
private Document createDocument(String dataType, String dataTypeName, String content) {
|
private Document createDocument(String dataType, String dataTypeName, String content) {
|
||||||
var doc = new Document();
|
var doc = new Document();
|
||||||
doc.append("session", sessionId);
|
doc.append("roomId", roomId);
|
||||||
for (var entry : settings.getExtraFields().entrySet()) {
|
for (var entry : settings.getExtraFields().entrySet()) {
|
||||||
doc.append(entry.getKey(), entry.getValue());
|
doc.append(entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
@@ -114,6 +112,7 @@ public class DataCollectorListener implements LiveDataCollector {
|
|||||||
doc.append("dataType", dataType);
|
doc.append("dataType", dataType);
|
||||||
doc.append("dataTypeName", dataTypeName);
|
doc.append("dataTypeName", dataTypeName);
|
||||||
doc.append("content", content);
|
doc.append("content", content);
|
||||||
|
doc.append("createdAt", new Date());
|
||||||
return doc;
|
return doc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user