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