From 47b050d0ba281004257b8f83ee03eb1a76895f77 Mon Sep 17 00:00:00 2001 From: "jacek.wolniewicz" Date: Sat, 29 Jun 2024 22:52:39 +0200 Subject: [PATCH] Introduce dependecy injection container - TikTokLiveClientBuilder this class has been higly modify to support DI container --- .../tiktok/data/models/battles/Team.java | 22 ++ .../tiktok/data/models/battles/Team1v1.java | 22 ++ .../tiktok/data/models/battles/Team2v2.java | 22 ++ .../tiktok/data/models/battles/Viewer.java | 22 ++ .../tiktok/data/models/gifts/Gift.java | 22 ++ .../tiktok/data/models/users/ListUser.java | 22 ++ .../data/settings/ProxyClientSettings.java | 10 +- .../listener/TikTokEventListenerBase.java | 22 ++ .../tiktok/live/builder/EventConsumer.java | 1 + Client/pom.xml | 13 +- .../github/jwdeveloper/tiktok/TikTokLive.java | 10 +- .../jwdeveloper/tiktok/TikTokLiveClient.java | 8 +- .../tiktok/TikTokLiveClientBuilder.java | 234 ++++++------------ .../tiktok/TikTokLiveEventHandler.java | 10 +- .../tiktok/TikTokLiveHttpOfflineClient.java | 22 ++ .../tiktok/common/ActionResult.java | 22 ++ .../tiktok/common/ActionResultBuilder.java | 22 ++ .../tiktok/common/LoggerFactory.java | 22 ++ .../tiktok/gifts/TikTokGiftsManager.java | 23 ++ .../http/mappers/HttpRequestJsonMapper.java | 22 ++ .../http/mappers/HttpResponseJsonMapper.java | 22 ++ .../tiktok/mappers/MessagesMapperFactory.java | 154 ++++++++++++ .../tiktok/mappers/TikTokLiveMapperModel.java | 1 - .../handlers/TikTokChestEventHandler.java | 26 -- .../websocket/TikTokWebSocketClient.java | 1 + .../TikTokWebSocketOfflineClient.java | 22 ++ .../websocket/TikTokWebSocketPingingTask.java | 24 ++ Examples/pom.xml | 2 +- .../Events_And_Gifts_Testing_Example.java | 22 ++ .../collector/api/CollectorEvent.java | 22 ++ .../extension/collector/api/Storage.java | 22 ++ .../settings/CollectorListenerSettings.java | 22 ++ .../collector/impl/DataCollectorListener.java | 22 ++ .../collector/impl/storages/FileStorage.java | 22 ++ .../collector/impl/storages/MongoStorage.java | 22 ++ 35 files changed, 771 insertions(+), 208 deletions(-) create mode 100644 Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/MessagesMapperFactory.java delete mode 100644 Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokChestEventHandler.java diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team.java index 5b4e773..dc8554f 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.data.models.battles; public abstract class Team { diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team1v1.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team1v1.java index 647ab55..9462e67 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team1v1.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team1v1.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.data.models.battles; import io.github.jwdeveloper.tiktok.data.models.users.User; diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team2v2.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team2v2.java index 374f579..b843f45 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team2v2.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Team2v2.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.data.models.battles; import io.github.jwdeveloper.tiktok.data.models.users.User; diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Viewer.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Viewer.java index bf4b385..814519f 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Viewer.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/battles/Viewer.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.data.models.battles; import io.github.jwdeveloper.tiktok.data.models.Picture; diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/Gift.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/Gift.java index 95f8b91..c97ad72 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/Gift.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/Gift.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.data.models.gifts; import com.google.gson.JsonObject; diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java index 60ef712..2553076 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.data.models.users; import lombok.Getter; diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java index ab295e1..83b750b 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/ProxyClientSettings.java @@ -31,7 +31,7 @@ import java.util.function.Consumer; @Getter @Setter -public class ProxyClientSettings implements Iterator +public class ProxyClientSettings implements Iterator, Iterable { private boolean enabled, autoDiscard = true, fallback = true; private Rotation rotation = Rotation.CONSECUTIVE; @@ -109,6 +109,14 @@ public class ProxyClientSettings implements Iterator return settings; } + /** + * With Iterable interface you can use this object inside For loop! + */ + @Override + public Iterator iterator() { + return this; + } + public enum Rotation { /** Rotate addresses consecutively, from proxy 0 -> 1 -> 2 -> ...etc. */ diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListenerBase.java b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListenerBase.java index 17e1be0..d21c272 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListenerBase.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListenerBase.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.listener; import io.github.jwdeveloper.tiktok.data.events.*; diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventConsumer.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventConsumer.java index f2039c1..984ac8c 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventConsumer.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/EventConsumer.java @@ -25,6 +25,7 @@ package io.github.jwdeveloper.tiktok.live.builder; import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; import io.github.jwdeveloper.tiktok.live.LiveClient; +@FunctionalInterface public interface EventConsumer { void onEvent(LiveClient liveClient, T event); diff --git a/Client/pom.xml b/Client/pom.xml index 2733f1a..f1b5592 100644 --- a/Client/pom.xml +++ b/Client/pom.xml @@ -11,6 +11,12 @@ Client + + + jitpack.io + https://jitpack.io + + @@ -24,7 +30,12 @@ ${project.version} compile - + + com.github.jwdeveloper.DepenDance + DepenDance-Full + 0.0.18-Release + compile + com.google.protobuf protobuf-java diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java index 4b4aa89..caf8997 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLive.java @@ -35,7 +35,7 @@ public class TikTokLive { /** * Example: https://www.tiktok.com/@dostawcavideo - hostName would be 'dostawcavideo' * - * @param hostName profile name of Tiktok user could be found in profile link + * @param hostName profile name of TikTok user could be found in profile link * @return LiveClientBuilder */ public static LiveClientBuilder newClient(String hostName) { @@ -45,7 +45,7 @@ public class TikTokLive { /** * Example: https://www.tiktok.com/@dostawcavideo - hostName would be 'dostawcavideo' * - * @param hostName profile name of Tiktok user could be found in profile link + * @param hostName profile name of TikTok user could be found in profile link * @return true if live is Online, false if is offline */ public static boolean isLiveOnline(String hostName) { @@ -55,7 +55,7 @@ public class TikTokLive { /** * Example: https://www.tiktok.com/@dostawcavideo - hostName would be 'dostawcavideo' * - * @param hostName profile name of Tiktok user could be found in profile link + * @param hostName profile name of TikTok user could be found in profile link * @return true if live is Online, false if is offline */ public static CompletableFuture isLiveOnlineAsync(String hostName) { @@ -65,7 +65,7 @@ public class TikTokLive { /** * Example: https://www.tiktok.com/@dostawcavideo - hostName would be 'dostawcavideo' * - * @param hostName profile name of Tiktok user could be found in profile link + * @param hostName profile name of TikTok user could be found in profile link * @return true is hostName name is valid and exists, false if not */ public static boolean isHostNameValid(String hostName) { @@ -75,7 +75,7 @@ public class TikTokLive { /** * Example: https://www.tiktok.com/@dostawcavideo - hostName would be 'dostawcavideo' * - * @param hostName profile name of Tiktok user could be found in profile link + * @param hostName profile name of TikTok user could be found in profile link * @return true is hostName name is valid and exists, false if not */ public static CompletableFuture isHostNameValidAsync(String hostName) { diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java index 15e98be..1764197 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java @@ -23,6 +23,7 @@ package io.github.jwdeveloper.tiktok; import com.google.protobuf.ByteString; +import io.github.jwdeveloper.dependance.injector.api.annotations.Inject; import io.github.jwdeveloper.tiktok.data.events.*; import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; import io.github.jwdeveloper.tiktok.data.events.control.*; @@ -43,13 +44,14 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; import java.util.logging.Logger; -public class TikTokLiveClient implements LiveClient { +public class TikTokLiveClient implements LiveClient +{ private final TikTokRoomInfo liveRoomInfo; private final LiveHttpClient httpClient; private final SocketClient webSocketClient; private final TikTokLiveEventHandler tikTokEventHandler; private final LiveClientSettings clientSettings; - private final TikTokListenersManager listenersManager; + private final ListenersManager listenersManager; private final Logger logger; private final GiftsManager giftsManager; private final TikTokLiveMessageHandler messageHandler; @@ -62,7 +64,7 @@ public class TikTokLiveClient implements LiveClient { SocketClient webSocketClient, TikTokLiveEventHandler tikTokEventHandler, LiveClientSettings clientSettings, - TikTokListenersManager listenersManager, + ListenersManager listenersManager, Logger logger) { this.messageHandler = messageHandler; this.giftsManager = giftsManager; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java index 80f1f97..29c9ad6 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -22,6 +22,9 @@ */ package io.github.jwdeveloper.tiktok; +import io.github.jwdeveloper.dependance.Dependance; +import io.github.jwdeveloper.dependance.api.DependanceContainer; +import io.github.jwdeveloper.tiktok.mappers.MessagesMapperFactory; import io.github.jwdeveloper.tiktok.common.LoggerFactory; import io.github.jwdeveloper.tiktok.data.events.*; import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; @@ -38,13 +41,15 @@ import io.github.jwdeveloper.tiktok.data.settings.LiveClientSettings; import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException; import io.github.jwdeveloper.tiktok.gifts.TikTokGiftsManager; import io.github.jwdeveloper.tiktok.http.HttpClientFactory; +import io.github.jwdeveloper.tiktok.http.LiveHttpClient; import io.github.jwdeveloper.tiktok.listener.*; import io.github.jwdeveloper.tiktok.live.*; import io.github.jwdeveloper.tiktok.live.builder.*; import io.github.jwdeveloper.tiktok.mappers.*; -import io.github.jwdeveloper.tiktok.mappers.data.MappingResult; -import io.github.jwdeveloper.tiktok.mappers.handlers.*; -import io.github.jwdeveloper.tiktok.messages.webcast.*; +import io.github.jwdeveloper.tiktok.mappers.handlers.TikTokCommonEventHandler; +import io.github.jwdeveloper.tiktok.mappers.handlers.TikTokGiftEventHandler; +import io.github.jwdeveloper.tiktok.mappers.handlers.TikTokRoomInfoEventHandler; +import io.github.jwdeveloper.tiktok.mappers.handlers.TikTokSocialMediaEventHandler; import io.github.jwdeveloper.tiktok.websocket.*; import java.util.*; @@ -52,28 +57,23 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; import java.util.logging.Logger; -import static io.github.jwdeveloper.tiktok.messages.enums.LinkMessageType.*; - public class TikTokLiveClientBuilder implements LiveClientBuilder { protected final LiveClientSettings clientSettings; protected final TikTokLiveEventHandler eventHandler; protected final List listeners; - protected Consumer onCustomMappings; - protected Logger logger; - protected GiftsManager giftsManager; + protected final List> onCustomMappings; public TikTokLiveClientBuilder(String userName) { this.clientSettings = LiveClientSettings.createDefault(); this.clientSettings.setHostName(userName); this.eventHandler = new TikTokLiveEventHandler(); this.listeners = new ArrayList<>(); - this.onCustomMappings = (e) -> { - }; + this.onCustomMappings = new ArrayList<>(); } - public LiveClientBuilder onMapping(Consumer onCustomMappings) { - this.onCustomMappings = onCustomMappings; + public LiveClientBuilder onMapping(Consumer consumer) { + this.onCustomMappings.add(consumer); return this; } @@ -104,169 +104,74 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { var httpSettings = clientSettings.getHttpSettings(); httpSettings.getParams().put("app_language", clientSettings.getClientLanguage()); httpSettings.getParams().put("webcast_language", clientSettings.getClientLanguage()); - - this.logger = LoggerFactory.create(clientSettings.getHostName(), clientSettings); - this.giftsManager = clientSettings.isFetchGifts() ? TikTokLive.gifts() : new TikTokGiftsManager(List.of()); } + //TODO each class registered to container should implement own interface, public LiveClient build() { validate(); - var tiktokRoomInfo = new TikTokRoomInfo(); - tiktokRoomInfo.setHostName(clientSettings.getHostName()); + var dependance = Dependance.newContainer(); - var listenerManager = new TikTokListenersManager(listeners, eventHandler); + //config + dependance.registerSingleton(LiveClientSettings.class, clientSettings); + dependance.registerSingleton(TikTokRoomInfo.class, container -> + { + var roomInfo = new TikTokRoomInfo(); + roomInfo.setHostName(clientSettings.getHostName()); + return roomInfo; + }); + dependance.registerSingleton(Logger.class, LoggerFactory.create(clientSettings.getHostName(), clientSettings)); - var httpClientFactory = new HttpClientFactory(clientSettings); + //messages + dependance.registerSingleton(TikTokLiveEventHandler.class, eventHandler); + dependance.registerSingleton(TikTokLiveMessageHandler.class); + dependance.registerSingleton(TikTokLiveMapper.class, (container) -> + { + var dependace = (DependanceContainer) container.find(DependanceContainer.class); + var mapper = MessagesMapperFactory.create(dependace); + onCustomMappings.forEach(action -> action.accept(mapper)); + return mapper; + }); - var liveHttpClient = clientSettings.isOffline() ? - new TikTokLiveHttpOfflineClient() : - new TikTokLiveHttpClient(httpClientFactory, clientSettings); + //listeners + dependance.registerSingletonList(TikTokEventListener.class, (e) -> listeners); + dependance.registerSingleton(ListenersManager.class, TikTokListenersManager.class); - var eventsMapper = createMapper(giftsManager, tiktokRoomInfo); - var messageHandler = new TikTokLiveMessageHandler(eventHandler, eventsMapper); + //networking + dependance.registerSingleton(HttpClientFactory.class); + if (clientSettings.isOffline()) { + dependance.registerSingleton(SocketClient.class, TikTokWebSocketOfflineClient.class); + dependance.registerSingleton(LiveHttpClient.class, TikTokLiveHttpOfflineClient.class); + } else { + dependance.registerSingleton(SocketClient.class, TikTokWebSocketClient.class); + dependance.registerSingleton(LiveHttpClient.class, TikTokLiveHttpClient.class); + } - var webSocketClient = clientSettings.isOffline() ? - new TikTokWebSocketOfflineClient(eventHandler) : - new TikTokWebSocketClient( - clientSettings, - messageHandler, - eventHandler); + //gifts + if (clientSettings.isFetchGifts()) { + dependance.registerSingleton(GiftsManager.class, TikTokLive.gifts()); + } else { + dependance.registerSingleton(GiftsManager.class, new TikTokGiftsManager(List.of())); + } - return new TikTokLiveClient( - messageHandler, - giftsManager, - tiktokRoomInfo, - liveHttpClient, - webSocketClient, - eventHandler, - clientSettings, - listenerManager, - logger); + //mapper + dependance.registerSingleton(TikTokGenericEventMapper.class); + dependance.registerSingleton(TikTokMapperHelper.class, TikTokLiveMapperHelper.class); + dependance.registerSingleton(TikTokLiveMapper.class); + + //mapper handlers + dependance.registerSingleton(TikTokCommonEventHandler.class); + dependance.registerSingleton(TikTokGiftEventHandler.class); + dependance.registerSingleton(TikTokRoomInfoEventHandler.class); + dependance.registerSingleton(TikTokSocialMediaEventHandler.class); + + //client + dependance.registerSingleton(LiveClient.class, TikTokLiveClient.class); + + var container = dependance.build(); + return container.find(LiveClient.class); } - public TikTokLiveMapper createMapper(GiftsManager giftsManager, TikTokRoomInfo roomInfo) { - - - var eventMapper = new TikTokGenericEventMapper(); - var mapper = new TikTokLiveMapper(new TikTokLiveMapperHelper(eventMapper)); - - //ConnectionEvents events - var commonHandler = new TikTokCommonEventHandler(); - var giftHandler = new TikTokGiftEventHandler(giftsManager, roomInfo); - var roomInfoHandler = new TikTokRoomInfoEventHandler(roomInfo); - var socialHandler = new TikTokSocialMediaEventHandler(roomInfo); - - - mapper.forMessage(WebcastControlMessage.class, commonHandler::handleWebcastControlMessage); - - //Room status events - mapper.forMessage(WebcastLiveIntroMessage.class, roomInfoHandler::handleIntro); - mapper.forMessage(WebcastRoomUserSeqMessage.class, roomInfoHandler::handleUserRanking); - mapper.forMessage(WebcastCaptionMessage.class, (inputBytes, messageName, mapperHelper) -> - { - var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastCaptionMessage.class); - return MappingResult.of(messageObject, new TikTokCaptionEvent(messageObject)); - }); - - - //User Interactions events - mapper.forMessage(WebcastChatMessage.class, (inputBytes, messageName, mapperHelper) -> - { - var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastChatMessage.class); - return MappingResult.of(messageObject, new TikTokCommentEvent(messageObject)); - }); - mapper.forMessage(WebcastSubNotifyMessage.class, (inputBytes, messageName, mapperHelper) -> - { - var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastSubNotifyMessage.class); - return MappingResult.of(messageObject, new TikTokSubscribeEvent(messageObject)); - }); - mapper.forMessage(WebcastEmoteChatMessage.class, (inputBytes, messageName, mapperHelper) -> - { - var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastEmoteChatMessage.class); - return MappingResult.of(messageObject, new TikTokEmoteEvent(messageObject)); - }); - mapper.forMessage(WebcastQuestionNewMessage.class, (inputBytes, messageName, mapperHelper) -> - { - var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastQuestionNewMessage.class); - return MappingResult.of(messageObject, new TikTokQuestionEvent(messageObject)); - }); - - mapper.forMessage(WebcastLikeMessage.class, roomInfoHandler::handleLike); - mapper.forMessage(WebcastGiftMessage.class, giftHandler::handleGifts); - mapper.forMessage(WebcastSocialMessage.class, socialHandler::handle); - mapper.forMessage(WebcastMemberMessage.class, roomInfoHandler::handleMemberMessage); - - - //Host Interaction events - mapper.forMessage(WebcastPollMessage.class, commonHandler::handlePollEvent); - mapper.forMessage(WebcastRoomPinMessage.class, commonHandler::handlePinMessage); - mapper.forMessage(WebcastChatMessage.class, (inputBytes, messageName, mapperHelper) -> - { - var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastChatMessage.class); - return MappingResult.of(messageObject, new TikTokCommentEvent(messageObject)); - }); - - - //LinkMic events - mapper.forMessage(WebcastLinkMicBattle.class, (inputBytes, messageName, mapperHelper) -> { - var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMicBattle.class); - return MappingResult.of(message, new TikTokLinkMicBattleEvent(message)); - }); - mapper.forMessage(WebcastLinkMicArmies.class, (inputBytes, messageName, mapperHelper) -> { - var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMicArmies.class); - return MappingResult.of(message, new TikTokLinkMicArmiesEvent(message)); - }); - mapper.forMessage(WebcastLinkMessage.class, ((inputBytes, messageName, mapperHelper) -> { - var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMessage.class); - return MappingResult.of(message, switch (message.getMessageType()) { - case TYPE_LINKER_INVITE -> new TikTokLinkInviteEvent(message); - case TYPE_LINKER_REPLY -> new TikTokLinkReplyEvent(message); - case TYPE_LINKER_CREATE -> new TikTokLinkCreateEvent(message); - case TYPE_LINKER_CLOSE -> new TikTokLinkCloseEvent(message); - case TYPE_LINKER_ENTER -> new TikTokLinkEnterEvent(message); - case TYPE_LINKER_LEAVE -> new TikTokLinkLeaveEvent(message); - case TYPE_LINKER_CANCEL_INVITE, TYPE_LINKER_CANCEL_APPLY -> new TikTokLinkCancelEvent(message); - case TYPE_LINKER_KICK_OUT -> new TikTokLinkKickOutEvent(message); - case TYPE_LINKER_LINKED_LIST_CHANGE -> new TikTokLinkLinkedListChangeEvent(message); - case TYPE_LINKER_UPDATE_USER -> new TikTokLinkUpdateUserEvent(message); - case TYPE_LINKER_WAITING_LIST_CHANGE, TYPE_LINKER_WAITING_LIST_CHANGE_V2 -> new TikTokLinkWaitListChangeEvent(message); - case TYPE_LINKER_MUTE -> new TikTokLinkMuteEvent(message); - case TYPE_LINKER_MATCH -> new TikTokLinkRandomMatchEvent(message); - case TYPE_LINKER_UPDATE_USER_SETTING -> new TikTokLinkUpdateUserSettingEvent(message); - case TYPE_LINKER_MIC_IDX_UPDATE -> new TikTokLinkMicIdxUpdateEvent(message); - case TYPE_LINKER_LINKED_LIST_CHANGE_V2 -> new TikTokLinkListChangeEvent(message); - case TYPE_LINKER_COHOST_LIST_CHANGE -> new TikTokLinkCohostListChangeEvent(message); - case TYPE_LINKER_MEDIA_CHANGE -> new TikTokLinkMediaChangeEvent(message); - case TYPE_LINKER_ACCEPT_NOTICE -> new TikTokLinkAcceptNoticeEvent(message); - case TYPE_LINKER_SYS_KICK_OUT -> new TikTokLinkSysKickOutEvent(message); - case TYPE_LINKMIC_USER_TOAST -> new TikTokLinkUserToastEvent(message); - default -> new TikTokLinkEvent(message); - }); - })); - // mapper.webcastObjectToConstructor(WebcastLinkMicMethod.class, TikTokLinkMicMethodEvent.class); - // mapper.webcastObjectToConstructor(WebcastLinkMicFanTicketMethod.class, TikTokLinkMicFanTicketEvent.class); - - //Rank events - // mapper.webcastObjectToConstructor(WebcastRankTextMessage.class, TikTokRankTextEvent.class); - // mapper.webcastObjectToConstructor(WebcastRankUpdateMessage.class, TikTokRankUpdateEvent.class); - // mapper.webcastObjectToConstructor(WebcastHourlyRankMessage.class, TikTokRankUpdateEvent.class); - - //Others events - // mapper.webcastObjectToConstructor(WebcastInRoomBannerMessage.class, TikTokInRoomBannerEvent.class); - // mapper.webcastObjectToConstructor(WebcastMsgDetectMessage.class, TikTokDetectEvent.class); - // mapper.webcastObjectToConstructor(WebcastBarrageMessage.class, TikTokBarrageEvent.class); - // mapper.webcastObjectToConstructor(WebcastUnauthorizedMemberMessage.class, TikTokUnauthorizedMemberEvent.class); - // mapper.webcastObjectToConstructor(WebcastOecLiveShoppingMessage.class, TikTokShopEvent.class); - // mapper.webcastObjectToConstructor(WebcastImDeleteMessage.class, TikTokIMDeleteEvent.class); - // mapper.bytesToEvents(WebcastEnvelopeMessage.class, commonHandler::handleEnvelop); - - - onCustomMappings.accept(mapper); - return mapper; - } - - public LiveClient buildAndConnect() { var client = build(); client.connect(); @@ -277,6 +182,11 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { return build().connectAsync(); } + /** + * To do figure out how to use Annotation processor can could dynamically + * like Lombok generates methods for all possible events, everytime library + * is compiled + */ public TikTokLiveClientBuilder onUnhandledSocial(EventConsumer event) { eventHandler.subscribe(TikTokUnhandledSocialEvent.class, event); return this; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveEventHandler.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveEventHandler.java index d4be170..cbeaf99 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveEventHandler.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveEventHandler.java @@ -41,19 +41,14 @@ public class TikTokLiveEventHandler { public void publish(LiveClient tikTokLiveClient, TikTokEvent tikTokEvent) { if (events.containsKey(TikTokEvent.class)) { var handlers = events.get(TikTokEvent.class); - for (var handle : handlers) { - handle.onEvent(tikTokLiveClient, tikTokEvent); - } + handlers.forEach(handler -> handler.onEvent(tikTokLiveClient,tikTokEvent)); } - if (!events.containsKey(tikTokEvent.getClass())) { return; } var handlers = events.get(tikTokEvent.getClass()); - for (var handler : handlers) { - handler.onEvent(tikTokLiveClient, tikTokEvent); - } + handlers.forEach(handler -> handler.onEvent(tikTokLiveClient,tikTokEvent)); } public void subscribe(Class clazz, EventConsumer event) { @@ -81,6 +76,5 @@ public class TikTokLiveEventHandler { var eventSet = events.get(clazz); eventSet.remove(consumer); - } } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java index 76eaa94..0e64de2 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok; import io.github.jwdeveloper.tiktok.data.models.Picture; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java index 25cb954..d2119fe 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.common; import com.google.gson.*; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResultBuilder.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResultBuilder.java index f9383d9..c63f606 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResultBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResultBuilder.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.common; import lombok.Setter; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/LoggerFactory.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/LoggerFactory.java index fcd2227..eb06253 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/LoggerFactory.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/LoggerFactory.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.common; import io.github.jwdeveloper.tiktok.data.settings.LiveClientSettings; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftsManager.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftsManager.java index 622500a..6a875c7 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftsManager.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/gifts/TikTokGiftsManager.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.gifts; import io.github.jwdeveloper.tiktok.data.models.gifts.Gift; @@ -7,6 +29,7 @@ import java.util.*; import java.util.function.*; import java.util.stream.Collectors; +//TODO I should've been called it TikTokGiftsRepository public class TikTokGiftsManager implements GiftsManager { private final Map giftsByIdIndex; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpRequestJsonMapper.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpRequestJsonMapper.java index 51c1441..bda137c 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpRequestJsonMapper.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpRequestJsonMapper.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.http.mappers; import com.google.gson.*; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpResponseJsonMapper.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpResponseJsonMapper.java index 4c0a5ec..b8f2856 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpResponseJsonMapper.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/mappers/HttpResponseJsonMapper.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.http.mappers; import com.google.gson.*; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/MessagesMapperFactory.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/MessagesMapperFactory.java new file mode 100644 index 0000000..b8c21b1 --- /dev/null +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/MessagesMapperFactory.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package io.github.jwdeveloper.tiktok.mappers; + +import io.github.jwdeveloper.dependance.api.DependanceContainer; +import io.github.jwdeveloper.dependance.injector.api.containers.Container; +import io.github.jwdeveloper.tiktok.TikTokRoomInfo; +import io.github.jwdeveloper.tiktok.data.events.*; +import io.github.jwdeveloper.tiktok.data.events.link.*; +import io.github.jwdeveloper.tiktok.live.GiftsManager; +import io.github.jwdeveloper.tiktok.mappers.data.MappingResult; +import io.github.jwdeveloper.tiktok.mappers.handlers.TikTokCommonEventHandler; +import io.github.jwdeveloper.tiktok.mappers.handlers.TikTokGiftEventHandler; +import io.github.jwdeveloper.tiktok.mappers.handlers.TikTokRoomInfoEventHandler; +import io.github.jwdeveloper.tiktok.mappers.handlers.TikTokSocialMediaEventHandler; +import io.github.jwdeveloper.tiktok.messages.webcast.*; + +import static io.github.jwdeveloper.tiktok.messages.enums.LinkMessageType.*; + +public class MessagesMapperFactory { + public static TikTokLiveMapper create(DependanceContainer container) { + + var mapper = container.find(TikTokLiveMapper.class); + + //ConnectionEvents events + var commonHandler = container.find(TikTokCommonEventHandler.class); + var giftHandler = container.find(TikTokGiftEventHandler.class); + var roomInfoHandler = container.find(TikTokRoomInfoEventHandler.class); + var socialHandler = container.find(TikTokSocialMediaEventHandler.class); + + + mapper.forMessage(WebcastControlMessage.class, commonHandler::handleWebcastControlMessage); + + //Room status events + mapper.forMessage(WebcastLiveIntroMessage.class, roomInfoHandler::handleIntro); + mapper.forMessage(WebcastRoomUserSeqMessage.class, roomInfoHandler::handleUserRanking); + mapper.forMessage(WebcastCaptionMessage.class, (inputBytes, messageName, mapperHelper) -> + { + var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastCaptionMessage.class); + return MappingResult.of(messageObject, new TikTokCaptionEvent(messageObject)); + }); + + + //User Interactions events + mapper.forMessage(WebcastChatMessage.class, (inputBytes, messageName, mapperHelper) -> + { + var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastChatMessage.class); + return MappingResult.of(messageObject, new TikTokCommentEvent(messageObject)); + }); + mapper.forMessage(WebcastSubNotifyMessage.class, (inputBytes, messageName, mapperHelper) -> + { + var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastSubNotifyMessage.class); + return MappingResult.of(messageObject, new TikTokSubscribeEvent(messageObject)); + }); + mapper.forMessage(WebcastEmoteChatMessage.class, (inputBytes, messageName, mapperHelper) -> + { + var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastEmoteChatMessage.class); + return MappingResult.of(messageObject, new TikTokEmoteEvent(messageObject)); + }); + mapper.forMessage(WebcastQuestionNewMessage.class, (inputBytes, messageName, mapperHelper) -> + { + var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastQuestionNewMessage.class); + return MappingResult.of(messageObject, new TikTokQuestionEvent(messageObject)); + }); + + mapper.forMessage(WebcastLikeMessage.class, roomInfoHandler::handleLike); + mapper.forMessage(WebcastGiftMessage.class, giftHandler::handleGifts); + mapper.forMessage(WebcastSocialMessage.class, socialHandler::handle); + mapper.forMessage(WebcastMemberMessage.class, roomInfoHandler::handleMemberMessage); + + //Host Interaction events + mapper.forMessage(WebcastPollMessage.class, commonHandler::handlePollEvent); + mapper.forMessage(WebcastRoomPinMessage.class, commonHandler::handlePinMessage); + mapper.forMessage(WebcastChatMessage.class, (inputBytes, messageName, mapperHelper) -> + { + var messageObject = mapperHelper.bytesToWebcastObject(inputBytes, WebcastChatMessage.class); + return MappingResult.of(messageObject, new TikTokCommentEvent(messageObject)); + }); + + //LinkMic events + mapper.forMessage(WebcastLinkMicBattle.class, (inputBytes, messageName, mapperHelper) -> { + var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMicBattle.class); + return MappingResult.of(message, new TikTokLinkMicBattleEvent(message)); + }); + mapper.forMessage(WebcastLinkMicArmies.class, (inputBytes, messageName, mapperHelper) -> { + var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMicArmies.class); + return MappingResult.of(message, new TikTokLinkMicArmiesEvent(message)); + }); + mapper.forMessage(WebcastLinkMessage.class, ((inputBytes, messageName, mapperHelper) -> { + var message = mapperHelper.bytesToWebcastObject(inputBytes, WebcastLinkMessage.class); + return MappingResult.of(message, switch (message.getMessageType()) { + case TYPE_LINKER_INVITE -> new TikTokLinkInviteEvent(message); + case TYPE_LINKER_CREATE -> new TikTokLinkCreateEvent(message); + case TYPE_LINKER_CLOSE -> new TikTokLinkCloseEvent(message); + case TYPE_LINKER_ENTER -> new TikTokLinkEnterEvent(message); + case TYPE_LINKER_LEAVE -> new TikTokLinkLeaveEvent(message); + case TYPE_LINKER_CANCEL_INVITE, TYPE_LINKER_CANCEL_APPLY -> new TikTokLinkCancelEvent(message); + case TYPE_LINKER_KICK_OUT -> new TikTokLinkKickOutEvent(message); + case TYPE_LINKER_LINKED_LIST_CHANGE -> new TikTokLinkLinkedListChangeEvent(message); + case TYPE_LINKER_UPDATE_USER -> new TikTokLinkUpdateUserEvent(message); + case TYPE_LINKER_WAITING_LIST_CHANGE, TYPE_LINKER_WAITING_LIST_CHANGE_V2 -> + new TikTokLinkWaitListChangeEvent(message); + case TYPE_LINKER_MUTE -> new TikTokLinkMuteEvent(message); + case TYPE_LINKER_MATCH -> new TikTokLinkRandomMatchEvent(message); + case TYPE_LINKER_UPDATE_USER_SETTING -> new TikTokLinkUpdateUserSettingEvent(message); + case TYPE_LINKER_MIC_IDX_UPDATE -> new TikTokLinkMicIdxUpdateEvent(message); + case TYPE_LINKER_LINKED_LIST_CHANGE_V2 -> new TikTokLinkListChangeEvent(message); + case TYPE_LINKER_COHOST_LIST_CHANGE -> new TikTokLinkCohostListChangeEvent(message); + case TYPE_LINKER_MEDIA_CHANGE -> new TikTokLinkMediaChangeEvent(message); + case TYPE_LINKER_ACCEPT_NOTICE -> new TikTokLinkAcceptNoticeEvent(message); + case TYPE_LINKER_SYS_KICK_OUT -> new TikTokLinkSysKickOutEvent(message); + case TYPE_LINKMIC_USER_TOAST -> new TikTokLinkUserToastEvent(message); + default -> new TikTokLinkEvent(message); + }); + })); + // mapper.webcastObjectToConstructor(WebcastLinkMicMethod.class, TikTokLinkMicMethodEvent.class); + // mapper.webcastObjectToConstructor(WebcastLinkMicFanTicketMethod.class, TikTokLinkMicFanTicketEvent.class); + + //Rank events + // mapper.webcastObjectToConstructor(WebcastRankTextMessage.class, TikTokRankTextEvent.class); + // mapper.webcastObjectToConstructor(WebcastRankUpdateMessage.class, TikTokRankUpdateEvent.class); + // mapper.webcastObjectToConstructor(WebcastHourlyRankMessage.class, TikTokRankUpdateEvent.class); + + //Others events + // mapper.webcastObjectToConstructor(WebcastInRoomBannerMessage.class, TikTokInRoomBannerEvent.class); + // mapper.webcastObjectToConstructor(WebcastMsgDetectMessage.class, TikTokDetectEvent.class); + // mapper.webcastObjectToConstructor(WebcastBarrageMessage.class, TikTokBarrageEvent.class); + // mapper.webcastObjectToConstructor(WebcastUnauthorizedMemberMessage.class, TikTokUnauthorizedMemberEvent.class); + // mapper.webcastObjectToConstructor(WebcastOecLiveShoppingMessage.class, TikTokShopEvent.class); + // mapper.webcastObjectToConstructor(WebcastImDeleteMessage.class, TikTokIMDeleteEvent.class); + // mapper.bytesToEvents(WebcastEnvelopeMessage.class, commonHandler::handleEnvelop); + return mapper; + } +} diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperModel.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperModel.java index 93f9f52..eb5a6fd 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperModel.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperModel.java @@ -75,5 +75,4 @@ public class TikTokLiveMapperModel implements TikTokMapperModel { return this; } - } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokChestEventHandler.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokChestEventHandler.java deleted file mode 100644 index f6c5be3..0000000 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokChestEventHandler.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package io.github.jwdeveloper.tiktok.mappers.handlers; - -public class TikTokChestEventHandler { -} diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java index 824c689..5d5ea37 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketClient.java @@ -22,6 +22,7 @@ */ package io.github.jwdeveloper.tiktok.websocket; +import io.github.jwdeveloper.dependance.injector.api.containers.Container; import io.github.jwdeveloper.tiktok.*; import io.github.jwdeveloper.tiktok.data.dto.ProxyData; import io.github.jwdeveloper.tiktok.data.requests.LiveConnectionData; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java index d30dddc..66d6ff5 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.websocket; import io.github.jwdeveloper.tiktok.TikTokLiveEventHandler; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketPingingTask.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketPingingTask.java index e44987b..65f2ce0 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketPingingTask.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketPingingTask.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.websocket; import org.java_websocket.WebSocket; @@ -15,6 +37,7 @@ public class TikTokWebSocketPingingTask { stop(); thread = new Thread(() -> pingTask(webSocket, pingTaskTime)); + thread.setName("pinging-task"); isRunning = true; thread.start(); } @@ -40,6 +63,7 @@ public class TikTokWebSocketPingingTask Thread.sleep(pingTaskTime+random.nextInt(MAX_TIMEOUT)); } catch (Exception e) { + //TODO we should display some kind of error message isRunning = false; } } diff --git a/Examples/pom.xml b/Examples/pom.xml index 2682f29..47410c8 100644 --- a/Examples/pom.xml +++ b/Examples/pom.xml @@ -75,7 +75,7 @@ io.github.jwdeveloper.tiktok extension-collector - 1.7.2-Release + ${project.version} compile diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/Events_And_Gifts_Testing_Example.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/Events_And_Gifts_Testing_Example.java index 3d7068b..7ac15d7 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/Events_And_Gifts_Testing_Example.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/Events_And_Gifts_Testing_Example.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok; import io.github.jwdeveloper.tiktok.data.events.TikTokCommentEvent; diff --git a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/CollectorEvent.java b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/CollectorEvent.java index 40165ea..8aef821 100644 --- a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/CollectorEvent.java +++ b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/CollectorEvent.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.extension.collector.api; import io.github.jwdeveloper.tiktok.live.LiveClient; diff --git a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/Storage.java b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/Storage.java index dc7e1a0..dd065cf 100644 --- a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/Storage.java +++ b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/Storage.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.extension.collector.api; import org.bson.Document; diff --git a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/settings/CollectorListenerSettings.java b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/settings/CollectorListenerSettings.java index c87a5d4..8430f92 100644 --- a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/settings/CollectorListenerSettings.java +++ b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/api/settings/CollectorListenerSettings.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.extension.collector.api.settings; import io.github.jwdeveloper.tiktok.extension.collector.api.CollectorEvent; diff --git a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/DataCollectorListener.java b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/DataCollectorListener.java index 900edcf..12a798a 100644 --- a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/DataCollectorListener.java +++ b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/DataCollectorListener.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.extension.collector.impl; import io.github.jwdeveloper.tiktok.annotations.TikTokEventObserver; diff --git a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/storages/FileStorage.java b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/storages/FileStorage.java index e7e2f8a..6d94824 100644 --- a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/storages/FileStorage.java +++ b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/storages/FileStorage.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.extension.collector.impl.storages; import io.github.jwdeveloper.tiktok.extension.collector.api.Storage; diff --git a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/storages/MongoStorage.java b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/storages/MongoStorage.java index 5fef256..f40fa6b 100644 --- a/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/storages/MongoStorage.java +++ b/extension-collector/src/main/java/io/github/jwdeveloper/tiktok/extension/collector/impl/storages/MongoStorage.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ package io.github.jwdeveloper.tiktok.extension.collector.impl.storages; import com.mongodb.ConnectionString;