diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000..a3199e5
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,14 @@
+{
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "Maven: clean package",
+ "type": "shell",
+ "command": "mvn clean package",
+ "problemMatcher": [
+ "$maven"
+ ],
+ "group": "build"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/lib/Client-1.11.9-Release-all.jar b/lib/Client-1.11.9-Release-all.jar
new file mode 100644
index 0000000..a03d891
Binary files /dev/null and b/lib/Client-1.11.9-Release-all.jar differ
diff --git a/pom.xml b/pom.xml
index 6409d51..8bd62d8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,14 +28,14 @@
slf4j-simple
2.0.12
-
-
+
+ com.github.jwdeveloper
+ TikTokLiveJava
+ 1.11.9
system
- ${project.basedir}/lib/TikTok-Live-Connector.jar
- -->
+ ${project.basedir}/lib/Client-1.11.9-Release-all.jar
+
diff --git a/src/main/java/Main.java b/src/main/java/Main.java
index c26122f..511ffc8 100644
--- a/src/main/java/Main.java
+++ b/src/main/java/Main.java
@@ -24,11 +24,9 @@ public class Main {
System.out.println("WebSocket server running on port " + port);
// Initialize TikTok event listener (placeholder)
- TikTokEventListener tiktokListener = new TikTokEventListener();
- // TODO: Connect TikTok-Live-Connector and wire up event callbacks
- // Placeholder: Simulate event
- tiktokListener.onFollow("@exampleuser");
+ TikTokEventListener tiktokListener = new TikTokEventListener(config, format, wsServer);
+ // TODO: Connect TikTokLiveJava and wire up event callbacks to tiktokListener
} catch (Exception e) {
System.err.println("Failed to load config or start server: " + e.getMessage());
@@ -36,31 +34,32 @@ public class Main {
}
private static void firstTimeSetup() {
- Scanner scanner = new Scanner(System.in);
- String username;
- do {
- System.out.print("Enter the TikTok username to follow (include @): ");
- username = scanner.nextLine();
- } while (!username.startsWith("@"));
+ try (Scanner scanner = new Scanner(System.in)) {
+ String username;
+ do {
+ System.out.print("Enter the TikTok username to follow (include @): ");
+ username = scanner.nextLine();
+ } while (!username.startsWith("@"));
- System.out.print("Enter websocket port (default 3000): ");
- String portInput = scanner.nextLine();
- int port = 3000;
- if (!portInput.isBlank()) {
- try {
- port = Integer.parseInt(portInput);
- } catch (NumberFormatException e) {
- System.out.println("Invalid port. Using default 3000.");
+ System.out.print("Enter websocket port (default 3000): ");
+ String portInput = scanner.nextLine();
+ int port = 3000;
+ if (!portInput.isBlank()) {
+ try {
+ port = Integer.parseInt(portInput);
+ } catch (NumberFormatException e) {
+ System.out.println("Invalid port. Using default 3000.");
+ }
}
- }
- // Write config.yml
- String config = "TIKTOK_USERNAME: '" + username + "'\nwebsocket_port: " + port + "\n";
- try {
- Files.writeString(Paths.get("config.yml"), config);
- System.out.println("config.yml created. Please edit it for more options as needed.");
- } catch (IOException e) {
- System.err.println("Failed to write config.yml: " + e.getMessage());
+ // Write config.yml
+ String config = "TIKTOK_USERNAME: '" + username + "'\nwebsocket_port: " + port + "\n";
+ try {
+ Files.writeString(Paths.get("config.yml"), config);
+ System.out.println("config.yml created. Please edit it for more options as needed.");
+ } catch (IOException e) {
+ System.err.println("Failed to write config.yml: " + e.getMessage());
+ }
}
}
}
diff --git a/src/main/java/TikTokEventListener.java b/src/main/java/TikTokEventListener.java
index 125d9ce..8bf87a4 100644
--- a/src/main/java/TikTokEventListener.java
+++ b/src/main/java/TikTokEventListener.java
@@ -2,22 +2,105 @@
// The actual implementation will require the TikTok-Live-Connector JAR in the lib folder.
// At test time, you will be provided with the download link and instructions.
+import java.util.Map;
+
+@SuppressWarnings("unchecked")
public class TikTokEventListener {
- // TODO: Integrate with TikTok-Live-Connector and handle events
- // Example methods for event callbacks:
+ private final Map config;
+ private final Map format;
+ private final WebSocketServerApp wsServer;
+
+ public TikTokEventListener(Map config, Map format, WebSocketServerApp wsServer) {
+ this.config = config;
+ this.format = format;
+ this.wsServer = wsServer;
+ }
+
+ private String formatEvent(String eventType, String target, Map vars) {
+ try {
+ Map events = (Map) format.get("events");
+ Map event = (Map) events.get(eventType);
+ Map fmt = (Map) event.get(target);
+ String text = (String) ((Map) fmt).get("text");
+ for (Map.Entry entry : vars.entrySet()) {
+ text = text.replace("$" + entry.getKey(), entry.getValue());
+ }
+ return text;
+ } catch (Exception e) {
+ return "[Format error]";
+ }
+ }
+
+ private void output(String eventType, Map vars, String filePath) {
+ String date = java.time.LocalDate.now().toString();
+ String time = java.time.LocalTime.now().withNano(0).toString();
+ vars.put("date", date);
+ vars.put("time", time);
+
+ // Console output
+ String cliMsg = formatEvent(eventType, "cli_format", vars);
+ System.out.println(cliMsg);
+
+ // File output
+ if (filePath != null && !filePath.isEmpty()) {
+ String fileMsg = formatEvent(eventType, "file_format", vars);
+ EventLogger.logToFile(filePath, fileMsg);
+ }
+
+ // WebSocket output
+ if (wsServer != null) {
+ wsServer.broadcastEvent(cliMsg);
+ }
+ }
+
public void onFollow(String userInfo) {
- // Handle follow event
+ Map vars = new java.util.HashMap<>();
+ vars.put("userinfo", userInfo);
+ String filePath = getOutputPath("follow");
+ output("follow", vars, filePath);
}
+
public void onLike(String userInfo, int amount) {
- // Handle like event
+ Map vars = new java.util.HashMap<>();
+ vars.put("userinfo", userInfo);
+ vars.put("amount", String.valueOf(amount));
+ String filePath = getOutputPath("likes");
+ output("likes", vars, filePath);
}
+
public void onShare(String userInfo) {
- // Handle share event
+ Map vars = new java.util.HashMap<>();
+ vars.put("userinfo", userInfo);
+ String filePath = getOutputPath("shares");
+ output("shares", vars, filePath);
}
+
public void onGift(String userInfo, String giftName, int amount) {
- // Handle gift event
+ Map vars = new java.util.HashMap<>();
+ vars.put("userinfo", userInfo);
+ vars.put("gift_name", giftName);
+ vars.put("amount", String.valueOf(amount));
+ String filePath = getOutputPath("gifts");
+ output("gifts", vars, filePath);
}
+
public void onChat(String userInfo, String message) {
- // Handle chat event
+ Map vars = new java.util.HashMap<>();
+ vars.put("userinfo", userInfo);
+ vars.put("msg", message);
+ String filePath = getOutputPath("chat");
+ output("chat", vars, filePath);
+ }
+
+ private String getOutputPath(String eventType) {
+ try {
+ Map events = (Map) config.get("events");
+ Map event = (Map) events.get(eventType);
+ Map fileEnable = (Map) event.get("file_enable");
+ if (fileEnable != null && fileEnable.containsKey("output_path")) {
+ return (String) fileEnable.get("output_path");
+ }
+ } catch (Exception ignored) {}
+ return null;
}
}
diff --git a/target/classes/Main.class b/target/classes/Main.class
index 4cac515..0dec863 100644
Binary files a/target/classes/Main.class and b/target/classes/Main.class differ
diff --git a/target/classes/TikTokEventListener.class b/target/classes/TikTokEventListener.class
index 9031e05..43f2e48 100644
Binary files a/target/classes/TikTokEventListener.class and b/target/classes/TikTokEventListener.class differ
diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..c65a5b5
--- /dev/null
+++ b/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=tiktok-live-event-stream-data
+groupId=com.smartcraftmedia
+version=1.0-SNAPSHOT
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..bb733a4
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,7 @@
+Main.class
+TikTokEventListener.class
+WebSocketServerApp.class
+ConfigLoader.class
+EventLogger.class
+EventType.class
+FormatLoader.class
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..0c418c0
--- /dev/null
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,7 @@
+G:\github\Smartcraft-media\tiktok-live-event-stream-data\src\main\java\EventLogger.java
+G:\github\Smartcraft-media\tiktok-live-event-stream-data\src\main\java\FormatLoader.java
+G:\github\Smartcraft-media\tiktok-live-event-stream-data\src\main\java\Main.java
+G:\github\Smartcraft-media\tiktok-live-event-stream-data\src\main\java\ConfigLoader.java
+G:\github\Smartcraft-media\tiktok-live-event-stream-data\src\main\java\EventType.java
+G:\github\Smartcraft-media\tiktok-live-event-stream-data\src\main\java\TikTokEventListener.java
+G:\github\Smartcraft-media\tiktok-live-event-stream-data\src\main\java\WebSocketServerApp.java
diff --git a/target/tiktok-live-event-stream-data-1.0-SNAPSHOT.jar b/target/tiktok-live-event-stream-data-1.0-SNAPSHOT.jar
new file mode 100644
index 0000000..e2e9fd8
Binary files /dev/null and b/target/tiktok-live-event-stream-data-1.0-SNAPSHOT.jar differ