From 5512f6fa7ff5a203c91767ccbeecb8c12cc78fe7 Mon Sep 17 00:00:00 2001 From: minster586 <43217359+minster586@users.noreply.github.com> Date: Wed, 14 Jan 2026 03:21:16 -0500 Subject: [PATCH] upload --- config.yml.example | 81 +++++++++++++++++++++++ format.yml.example | 26 ++++++++ info.txt | 39 +++++++++++ pom.xml | 53 +++++++++++++++ src/main/java/ConfigLoader.java | 13 ++++ src/main/java/EventLogger.java | 18 +++++ src/main/java/EventType.java | 7 ++ src/main/java/FormatLoader.java | 13 ++++ src/main/java/Main.java | 66 ++++++++++++++++++ src/main/java/TikTokEventListener.java | 23 +++++++ src/main/java/WebSocketServerApp.java | 48 ++++++++++++++ src/main/resources/logback.xml | 10 +++ target/classes/ConfigLoader.class | Bin 0 -> 1107 bytes target/classes/EventLogger.class | Bin 0 -> 2057 bytes target/classes/EventType.class | Bin 0 -> 1053 bytes target/classes/FormatLoader.class | Bin 0 -> 1107 bytes target/classes/Main.class | Bin 0 -> 3860 bytes target/classes/TikTokEventListener.class | Bin 0 -> 905 bytes target/classes/WebSocketServerApp.class | Bin 0 -> 3188 bytes target/classes/logback.xml | 10 +++ 20 files changed, 407 insertions(+) create mode 100644 config.yml.example create mode 100644 format.yml.example create mode 100644 info.txt create mode 100644 pom.xml create mode 100644 src/main/java/ConfigLoader.java create mode 100644 src/main/java/EventLogger.java create mode 100644 src/main/java/EventType.java create mode 100644 src/main/java/FormatLoader.java create mode 100644 src/main/java/Main.java create mode 100644 src/main/java/TikTokEventListener.java create mode 100644 src/main/java/WebSocketServerApp.java create mode 100644 src/main/resources/logback.xml create mode 100644 target/classes/ConfigLoader.class create mode 100644 target/classes/EventLogger.class create mode 100644 target/classes/EventType.class create mode 100644 target/classes/FormatLoader.class create mode 100644 target/classes/Main.class create mode 100644 target/classes/TikTokEventListener.class create mode 100644 target/classes/WebSocketServerApp.class create mode 100644 target/classes/logback.xml diff --git a/config.yml.example b/config.yml.example new file mode 100644 index 0000000..4eba4ab --- /dev/null +++ b/config.yml.example @@ -0,0 +1,81 @@ +# tiktok username to follow +TIKTOK_USERNAME: '@tiktok' + +websocket_port: 3000 # Requires program restart to take effect + +events: true + follow: true + ws_enable: true + profile_img: true + userinfo: true + user_style: username + file_enable: true + profile_img: true + userinfo: true + user_style: username + output_path: 'C:\Users\Darrin DeYoung\Desktop\Tiktok\Follows' + cli_enable: true + userinfo: true + user_style: username + likes: true + ws_enable: true + profile_img: true + userinfo: true + user_style: username + amount: true + file_enable: true + profile_img: true + userinfo: true + user_style: username + amount: true + output_path: 'C:\Users\Darrin DeYoung\Desktop\Tiktok\Likes' + cli_enable: true + userinfo: true + user_style: username + amount: true + shares: true + ws_enable: true + profile_img: true + userinfo: true + user_style: username + file_enable: true + profile_img: true + userinfo: true + user_style: username + output_path: 'C:\Users\Darrin DeYoung\Desktop\Tiktok\Shares' + cli_enable: true + userinfo: true + user_style: username + follower_only_share: true + gifts: true + ws_enable: true + profile_img: true + userinfo: true + user_style: username + gift_name: true + amount: true + file_enable: true + profile_img: true + userinfo: true + user_style: username + gift_name: true + amount: true + output_path: 'C:\Users\Darrin DeYoung\Desktop\Tiktok\Gifts' + cli_enable: true + userinfo: true + user_style: username + gift_name: true + amount: true + chat: true + ws_enable: true + profile_img: true + userinfo: true + user_style: username + file_enable: false + profile_img: false + userinfo: false + user_style: username + output_path: 'C:\Users\Darrin DeYoung\Desktop\Tiktok\Chat' + cli_enable: true + userinfo: true + user_style: username \ No newline at end of file diff --git a/format.yml.example b/format.yml.example new file mode 100644 index 0000000..338d20f --- /dev/null +++ b/format.yml.example @@ -0,0 +1,26 @@ +events: + follow: + file_format: + text: $userinfo followed + cli_format: + text: $date | $time | $userinfo | Follow + likes: + file_format: + text: $userinfo liked $amount + cli_format: + text: $date | $time | $userinfo | Likes x$amount + shares: + file_format: + text: $userinfo Shared + cli_format: + text: $date | $time | $userinfo | Shared + gifts: + file_format: + text: $userinfo sent x$amount $gift_name + cli_format: + text: $date | $time | $userinfo | x$amount $gift_name + chat: + file_format: + text: $userinfo > $msg + cli_format: + text: $date | $time | $userinfo | Message > $msg \ No newline at end of file diff --git a/info.txt b/info.txt new file mode 100644 index 0000000..ce28442 --- /dev/null +++ b/info.txt @@ -0,0 +1,39 @@ +This is a Java maven application you will design It shall work with Java 17 and higher There will be no interface it will run strictly in console + + + +1. https://github.com/zerodytrash/TikTok-Live-Connector + +2. https://github.com/vortisrd/chatrd + +3. https://streamer.bot/ + +4. needs a "config.yml" For all its configuration + +5. It needs to have the ability to run a websocket server to allow the two things from numbers 2 and 3 to be able to connect to it + a. It will also output every event to a file for each type of event listed in step 6 + +6. It will have features like But be completely free it does not need GUI Everything will be in the config It will default to everything being enabled Events that it will listen for are as follows + a. Follows + b. Likes + c. shares + d. gifts + e. comments or messages (what TicTok calls them I call it live chat) + +7. when first ran it will ask for oh the Tic tac user is to be followed or watched the user must include the Symbol "@" And their username in order to follow them + +8. Also when it is first run it will ask what websocket port would it like to use (ie ipaddress:3000) + a. The default port if there is no config file will be 3000 + +9. It will listen on all interfaces not just localhost + +10. If a "config.yml" They exist in the same folder as the jar file It will use the information from that file or what it is doing + +11. If there are any dependencies that are required you will prompt me with a URL to download the dependency If I cannot find the one you are requesting and I find one that is newer I will download that and place it in a folder labeled "lib" + a. If what you wrote does not match and work or what I downloaded you will tweak it to work for it as such + +12. YOU WILL NOT RUN ANY TESTS WITHOUT USER AUTHORIZATION + +13. All events that are running at the application monitors will show up in the console + +14. You will have an example config.yml.example file to understand how I want it to look and a format.yml.example file Which will show you how I want it to look you will not deviate from that example \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..6409d51 --- /dev/null +++ b/pom.xml @@ -0,0 +1,53 @@ + + 4.0.0 + com.smartcraftmedia + tiktok-live-event-stream-data + 1.0-SNAPSHOT + + 17 + 17 + + + + + org.java-websocket + Java-WebSocket + 1.5.4 + + + + org.yaml + snakeyaml + 2.2 + + + + org.slf4j + slf4j-simple + 2.0.12 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.10.1 + + 17 + 17 + + + + + \ No newline at end of file diff --git a/src/main/java/ConfigLoader.java b/src/main/java/ConfigLoader.java new file mode 100644 index 0000000..da3496b --- /dev/null +++ b/src/main/java/ConfigLoader.java @@ -0,0 +1,13 @@ +import org.yaml.snakeyaml.Yaml; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Map; + +public class ConfigLoader { + public static Map loadConfig(String path) throws IOException { + Yaml yaml = new Yaml(); + try (FileInputStream fis = new FileInputStream(path)) { + return yaml.load(fis); + } + } +} diff --git a/src/main/java/EventLogger.java b/src/main/java/EventLogger.java new file mode 100644 index 0000000..c36b6c5 --- /dev/null +++ b/src/main/java/EventLogger.java @@ -0,0 +1,18 @@ +import java.io.FileWriter; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +public class EventLogger { + public static void logToFile(String path, String message) { + try (FileWriter fw = new FileWriter(path, true)) { + fw.write(message + System.lineSeparator()); + } catch (IOException e) { + System.err.println("Failed to write event to file: " + e.getMessage()); + } + } + + public static String getTimestamp() { + return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + } +} diff --git a/src/main/java/EventType.java b/src/main/java/EventType.java new file mode 100644 index 0000000..fe7d318 --- /dev/null +++ b/src/main/java/EventType.java @@ -0,0 +1,7 @@ +public enum EventType { + FOLLOW, + LIKE, + SHARE, + GIFT, + CHAT +} diff --git a/src/main/java/FormatLoader.java b/src/main/java/FormatLoader.java new file mode 100644 index 0000000..22a873e --- /dev/null +++ b/src/main/java/FormatLoader.java @@ -0,0 +1,13 @@ +import org.yaml.snakeyaml.Yaml; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Map; + +public class FormatLoader { + public static Map loadFormat(String path) throws IOException { + Yaml yaml = new Yaml(); + try (FileInputStream fis = new FileInputStream(path)) { + return yaml.load(fis); + } + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 0000000..c26122f --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,66 @@ +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Scanner; + +public class Main { + public static void main(String[] args) { + // Check for config.yml + File configFile = new File("config.yml"); + if (!configFile.exists()) { + System.out.println("No config.yml found. Starting first-time setup..."); + firstTimeSetup(); + } + + // Load config and format + try { + var config = ConfigLoader.loadConfig("config.yml"); + var format = FormatLoader.loadFormat("format.yml"); + + int port = (int) config.getOrDefault("websocket_port", 3000); + WebSocketServerApp wsServer = new WebSocketServerApp(port); + wsServer.start(); + 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"); + + } catch (Exception e) { + System.err.println("Failed to load config or start server: " + e.getMessage()); + } + } + + 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("@")); + + 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()); + } + } +} diff --git a/src/main/java/TikTokEventListener.java b/src/main/java/TikTokEventListener.java new file mode 100644 index 0000000..125d9ce --- /dev/null +++ b/src/main/java/TikTokEventListener.java @@ -0,0 +1,23 @@ +// This is a placeholder for TikTok-Live-Connector integration. +// 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. + +public class TikTokEventListener { + // TODO: Integrate with TikTok-Live-Connector and handle events + // Example methods for event callbacks: + public void onFollow(String userInfo) { + // Handle follow event + } + public void onLike(String userInfo, int amount) { + // Handle like event + } + public void onShare(String userInfo) { + // Handle share event + } + public void onGift(String userInfo, String giftName, int amount) { + // Handle gift event + } + public void onChat(String userInfo, String message) { + // Handle chat event + } +} diff --git a/src/main/java/WebSocketServerApp.java b/src/main/java/WebSocketServerApp.java new file mode 100644 index 0000000..0684619 --- /dev/null +++ b/src/main/java/WebSocketServerApp.java @@ -0,0 +1,48 @@ +import org.java_websocket.server.WebSocketServer; +import org.java_websocket.WebSocket; +import org.java_websocket.handshake.ClientHandshake; +import java.net.InetSocketAddress; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +public class WebSocketServerApp extends WebSocketServer { + private final Set connections = Collections.synchronizedSet(new HashSet<>()); + + public WebSocketServerApp(int port) { + super(new InetSocketAddress(port)); + } + + @Override + public void onOpen(WebSocket conn, ClientHandshake handshake) { + connections.add(conn); + System.out.println("WebSocket client connected: " + conn.getRemoteSocketAddress()); + } + + @Override + public void onClose(WebSocket conn, int code, String reason, boolean remote) { + connections.remove(conn); + System.out.println("WebSocket client disconnected: " + conn.getRemoteSocketAddress()); + } + + @Override + public void onMessage(WebSocket conn, String message) { + System.out.println("Received from client: " + message); + } + + @Override + public void onError(WebSocket conn, Exception ex) { + System.err.println("WebSocket error: " + ex.getMessage()); + } + + @Override + public void onStart() { + System.out.println("WebSocket server started on " + getAddress()); + } + + public void broadcastEvent(String event) { + for (WebSocket conn : connections) { + conn.send(event); + } + } +} diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..72f4178 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,10 @@ + + + + %d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + \ No newline at end of file diff --git a/target/classes/ConfigLoader.class b/target/classes/ConfigLoader.class new file mode 100644 index 0000000000000000000000000000000000000000..20829b305cd4151070a3d1e8f6b64acecc1c63a6 GIT binary patch literal 1107 zcmah{+fEZv6kVqmrZco$Ewp$8QE5v{y^~lZ8iGla79L7Scs#U285m}o>D0>y8DI4U z5=q1-P5cjk!UuJoDTOK;Gn2FTK6{uH@!=zYCs@=F5{R$3&W_crxUyk-8X^KC zd-8=W+R|wj*SGh~x-T%WWI2|LW!1PV0?EIT+Eg*F#c>_e?6vBR zK=u@YfRs;$nJ(fBFNqAm&$lEj$3L}(Yo!nIlMV!HDr2?3j%EHdhSa#t~hd- zXAs$F)HL<*kBcBmd#_YT5xt>2+%YQ+vP<@L;zVHUIeBltc^Ct{C!JWu4a2#1I zQs#In8HS=eMXErIpH8Gf>>zOl<|$PP)5MV!@+btjRV)ORtEhKymxbKpeFg(R`7Em8 dzJ{cRx!_MhXqb6Q{X2|j6uQo`9}*wJqhD@i{y+c# literal 0 HcmV?d00001 diff --git a/target/classes/EventLogger.class b/target/classes/EventLogger.class new file mode 100644 index 0000000000000000000000000000000000000000..4515527b3516b69e4b3a69e384617b4c578644ac GIT binary patch literal 2057 zcmaJ?ZC4vb6n+K*o1{yLw9wLOO)KTCp%Jw&l1gnU2$}>m2)4D=AsNC#vYWFRK>mq; zz|*hR50r!F*l&7{Kgkc)XLbV#huGacGjr$Oxi8PXbNBCm5B~u08LAdK1kTLvC|75_ za#{HnA_9p`xg*mR>6X)rYn!U51-kD!uA`>~I!DJ=1R^tDNyX8Ln2j!U3-o3kSLL^> zYsz1iYZWEXm-ULWvLb!Q(2dQA-f-#yJ=qqM8G%^ED=&Lz|HoBgSt;8{aixw`Nh_tX**Q#n`5SQp+h2a!b zP5M%MzQFm>vC}^E5yN+FyoW0S7pihg&3JB6>QzT?a8=jR)r|FS8y`;VYNOr+lC*IZ z*95wDO>6@FZIqdK5*V^^-6W!`Sn=vi%?QRUj0&733VVdEy!%)j!9M}HUrfnQ>RG}EMHH511qKDO}DkyWx67H5Ad zs+x8@*TyFX+IU&%94*SS>Vv>-1K=Hj;a1~~w6_K2Q)DbmwU}t}z{Wj;mQ^!ORb19- zP3jF(i%k?7x+zr+y%6YF-(`xALu%F%OH&xsk6A6@kk?btvbdF#wV=8!%$+Q#pmqgp z2E6Rhn3mOA91Hl$!k4U=z$HyaI=Cs1q*g}EMix2Z?0R(S@=@KLmdix3NEG(?OyqJC zrBZT!eyUoXs@LQA8U+jA2wZF0Soi#@)afHDa{CDAom%bCP|ol+<1_Xb4GV zI=3O$xj&T@thNQ$RsKvx@=n(+I0DyCLD4Qa3tIwL-Y&|lhDhKlZ*C{sA2_n-pqryb zD$QAN?izoE=u0j-5a(#vW<0~u4h1;(kc#0fdbz{HB8CW60nbHF1cPWFH^A!0nu&q5+k9olpIR=tS-XdQua=Aex%k$8hR(?l+`T z`}pt>x6JvwFX?hG6F*K%5!~Txo*dsva*VeFffrFq#V8j?o_;^0x5oQ%o}q{QcTRIQ ztNUE>|A%3GjtAuCxqgTlM*fKWTd>~nP?v?-;2W{PF9E^%AH*MUipAbgK}RTI7?Z~E z7q}F{f)rJm$3DP(U;Y3~`&jvvbSt!pz&Rt=i6;T?DZb}?mQrifQw&ChGWX)7H?WBc G2LA&=-3$8w literal 0 HcmV?d00001 diff --git a/target/classes/EventType.class b/target/classes/EventType.class new file mode 100644 index 0000000000000000000000000000000000000000..cfaadf07f26902500665b2a5802ec1cc1eeab106 GIT binary patch literal 1053 zcmZ`%ZBr6a6n-uXyRfWil&1JnrX`?Bl-djA$T*mctIV`Yv(u-AHd+T4XIYrxxAZ3p zKj_rt^tm6^bnYF(?L&Ov+~?l&ob#OX?62S7t^vHpD+M8jSh;7r{&D}@RuE=LoLW6A z*RtGZuIzTt805XGu2W54v4V)#vE@0h~weu+Z7d~|ZSTr24( zWrIO`{|_@-Y_uHL@wXYIbf(5h?GJVo5fuzc4YzTJx)z5iQ)&H1k>Pue+bmQvwHW12 zX^23MLg8RWgTg_SgEwd>x6A?dv>|hA^C_Yx!M|9_It~IJp>5vR&B8)1oE%*yNoV z?iE0hY!ZArB J@j}Fxe*na(#-acK literal 0 HcmV?d00001 diff --git a/target/classes/FormatLoader.class b/target/classes/FormatLoader.class new file mode 100644 index 0000000000000000000000000000000000000000..552459c59d03225557e24f85753208d82a1e072a GIT binary patch literal 1107 zcmah{+fEZv6kVqmrZco$Ewp$8QE5v{y^~lZ8UhJP3lAkEJRaJy3`}R5>D0>y8DI4U z5=q1-P5cjk!UuJoDTOK;Gn2FTK6{uH@!=zYCs@=F5{R$4UQ_yISJq8WLquR? zU%rq#F@+S}5zlzn;`@%OB@z)-nAXGy@YnZ0`_Fq|#Z>)RWa$ zHM8YguG7{qCNLhnvE1VN=9x!8uUZX9`W=sq*8d-O>0;)-n{G2o%OwpH0+X)SD880W zyV!Q*ff;B!Gz}!7Ye*B(qqJt(=DO4B_^ig1O#>-hR*kzNko+5|Z588M9M>_;UaQ^+ zWKV&r!t+qQ#`Fz~>~07og514+sf;({xTQuFt=Vpy!<$1^L#EfbAi&n1=e|_qiX(@4 z29fo8wbN>OX1i^YL#m(b8MqW|L`(X6YU&q8#|l($1k&Yybd1vsKUaH^?!IP;e{_t9 zMAetI1I|8JB@GXL+tcova4V{A$E%s@xxi@umMth^m;rNf`GF8Mt}aiFR*_OrMsr7q zy${?5PvutUAkTOgK$)PWV+g|xH9|c?&nU*Jg>Wed_l=$??aDEdJ4cu-i;CDdMrw!Q zryfV<(~(15{e+ox|W^t(kPsq>42PG=IXhdxy=Uh@(S6B4=CE=1l5BshGfObV?W2D(LKPgdr`~Yv{rq z+*X`7U61=Sh*NFYfV)&|To!Kjg6oNrhP$ED%C0c-&H$AT9Hm7wH-F$r!PXyl^!1qK^a>`70P#a8Dyzf|x3vS?nD( z%8cedu9~);lHmok-j4@V>?QoLKUjr-V+}qSkK-Zwc1}#WcCH}2GiBTH5=djeihT;! z)N`7#JTW639KgejaLy=J#Q3z#e5NOow$Loyj)NFfaY(@mAEWB2hDR_&uV#cd?mQx< zjY^RzdN3MdpxAT-G#rWU6AnpN-=yI%G7944d{VmQ%Oj)W2sL~{OlAGZvcj1Y&cQO7 ze-xuqabr|3ou8BgM>RYqv()0s+$UL7Sq&37u3%lsCfuAM?&MXstkzp{tU=S0~vZA*gyGm#*tqr!EK88YyO?kHQKZ%OKLR>oy2 z*czq0TCfq$!y$5HI5Uj4qd|e!Dp^)GWfUwAE1k`uHRnrPHkV~0kW+zH2`?3=K#>VN z=LT7#`y;m}j;mIBX2G)yRZ3-TH(;8E3f&3oemPg1Tf4lkT_{(3+ur3~?z^3h$Ve!_ z0RpaI!^jm_hJKG!@%C!r_@d9|42$WPDScYQJMc~gO|oUy+fv3VSE_9(flGL|ROd4a z)`uw~p;42b$vED_-ZjLEbaZc4=m7`1l#^w!S$Q^FnbeWqZCbfvB`@>?J^i}uUC(KF zUP`USZ&7l$_iOloluz6e=P6c;E&4+w@IV5W@lh2YS>9g#&aUBO_&AgA7mF*)LRLeB zoT{Eq#qmi6_XeKUnv5<}u6O5y>eu)5_4WDQUB(Ln05Y)Ilbo3lgR!{H*Jz5loD|C@JJ)M87b-iReLbv@uT-|VWONcy86SyHe+YhTj zNv)69I$M$#lvx#v3hu6-M8PE`IKFC@)QlSx8j&J(99AEzG+r$ad9$gb)%skURHa{M zR8hpB;daD})NkEkjwiBq#mR}FCAP_HQcCW|GCE}2p6fYAc~p3_cHT|k=lG?HUntm8 z_s6v6?1JbG+zQT}VI$|+&IPI2UnzJYDzMNx06c71c`9Mch;0`tK<%S%|h3)V>nO?-Xp!qoCo)GS#*dsio*gP*jR`53nFsMqYaPXjO@vSMZq^B8_0 zb`y`D?2Ij7q`#%BWgg>P+!o|p6jIkIW- z6ptnu_A$g|XgJFmiB&-nCGNDDD=k_!5or)*el-(s7oLQ}-7}nb;gR7ysi|O&RND0B z9L{sa1tP8GJHWVD!?;L{w{dP2nqS8T6|4V^$5c$M; z-gQLs{Omm5yL}$-8`+Wk;5`GG7kRp(N5Ppu!9WmB(o{>P-`jl;Xdr<$~|0rKl$5>Bj_i>KIU>iaR$iU z!+3_cG6#o!30}lYSmLks2CCQxiWDvKVW{8 znN!`Jm`G2UMc3oj{mwo2_MeaU-vG|B=b<1_@9I(4j;@}SiG3Z#%BavoNuc&5pJgkM zX3)CpJ*j>yQ2wcnjxPj?&7*sP(xrV+RTS}U0dpt|Ecx1~+sU}6!mjKEN?^seeHq-# zP`i5;EX6||39R}#rOyN^)?C{lurEw$`kyX3aj4DU%vG*TA{DmHqjeRgGHBEqUyoS7 zkt5J{3S~LA6T_ZFTfnoXGn66o3Et>OhMPIybfrY9G9Ym)$0>d}l*AAJ3wK7mv5F!& zAYAR(N!VA{+6`_!XErCUQyhTv=MMzRJaO(^J>FW}1^2n*H&kAED4?1pF^GAd7t#do zi@XVZ#}ZcupYkiX*jKQcfQ|Gq107n!GFOft^-SUyap!AFVlk1}PamfwoY)VnvH<_q zY(KRbe%7#_`DxQjDbG(mkvL8tbNy_vxnvrNvmymIv6adGv(3iLHn$U5fgQRkVD~R( CB9aXN literal 0 HcmV?d00001 diff --git a/target/classes/WebSocketServerApp.class b/target/classes/WebSocketServerApp.class new file mode 100644 index 0000000000000000000000000000000000000000..819ce09e6d45a35a9c9d2f1815d0d132f21b468f GIT binary patch literal 3188 zcma)8Yj+b>6x}y19hy#QNlOa_N)V8w6r%D_381AGskRgwY^A6;O>Uc^=}erNh8ExN z7rtMJ`q|I2lt*35#kM@-A~jtMj-hLaP#4ca-Wp;e&A zcVtN~HOxyni-BCuk**tsjy4_5h(^(X_39}muq{#cUe_d@oY2rIuzofClZKmT3Q=^R zOF?uCG$fJ}QEb9y4Lt%IR?iOFg+joAjxE?qBHSe_n|Ex>yd-mk5r_x=LvE7QY^0mP zAa$%klj6~|K@ATGwEL$1+su;d$$1?QVLz?y1;)Rj%#&%SPCKUMWjse3 z^XV2G#KRg632eDr7wLEej|z0nN^e}w+n%iI6oKAEP=@+#5k(qDH5{pq(PJF5I*#En z0j*>d7UbBB!2R{IEXQ6>%{NQOIDi8>j$=@ud!DQg+E&)^CQUETC)YD9k0q@FW6E@x z4kE1ti(&{*YB(X#;d59`l8%#L@wKAjt-$J66=DTdjg=Z=l2NbvVQZ;j4qHKBU%kWO z`|BBXH>d!woHFWlV*%G6Osu@sv4l&kq9qpzR-Hzm7HZmG)$y8Y=SEjrIR*HJjyLfZSH7%J9rm zQPw$ruHyWPx>jrj5Q9dckYS7GDU&YmVeh zxBApq_>5!E2Vg$LH!cgh6ROtf%kl0y*T zeRJO*(9dqZfps^~&gYJ^H?ZL*HvW#@Uwy+kuj_osR{n-W(Zkht?sb*TaUXVYMIh|N zE`n3)u{&@w!!s(Fc;9d6-E#|x2qv##AD<2g+{EE!JPusP6L)%wF~kmRL#OX4Ud9ML z#qkuLrU&9;1f%pJa0+9*s>CjFy{5wF=^CGzx;{73dJ}#2_&yJmG3xp}!#ovraXgEO zAht<7M?wY8Vk(GZEXci;3HLAK+#OD%K144m-ByugYv`~wOtKZv(~U~<1-ux5j|brG z*Kof7I;NMAuZzC}Z7ho_SDD225WhXdZ-lK1N;Gh4RkR0zUwIXwX*BFNU+h8 zz6+hkGznY?6fqpYT_#*3-z8KZ+``MO*DvVYdkYH!f8pS0KRe=;2)OaOz}4ITsD5Z* z$RM_|>t|ql(aZa8epOb}NrdSn@HR=}$ZXw+D=6Zu`f ni{L%H&wHGezD&zc{p;uc^-KTywSWB<-}96jn=81ApRnmaUF;bC literal 0 HcmV?d00001 diff --git a/target/classes/logback.xml b/target/classes/logback.xml new file mode 100644 index 0000000..72f4178 --- /dev/null +++ b/target/classes/logback.xml @@ -0,0 +1,10 @@ + + + + %d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n + + + + + + \ No newline at end of file