From 660cb287e91055ba8d18c69c470d1ce9fb30a53f Mon Sep 17 00:00:00 2001 From: "jacek.wolniewicz" Date: Wed, 3 Jul 2024 22:27:15 +0200 Subject: [PATCH] Improvement of Listener --- .../tiktok/annotations/Priority.java | 18 ++++++ .../annotations/TikTokEventObserver.java | 10 ++- .../tiktok/listener/ListenersManager.java | 7 +- .../tiktok/listener/TikTokEventListener.java | 8 ++- .../live/builder/LiveClientBuilder.java | 3 +- ...ocketClient.java => LiveSocketClient.java} | 3 +- .../jwdeveloper/tiktok/TikTokLiveClient.java | 6 +- .../tiktok/TikTokLiveClientBuilder.java | 18 ++++-- .../tiktok/listener/ListenerBindingModel.java | 3 +- .../listener/TikTokListenersManager.java | 64 +++++++++++-------- .../mappers/TikTokLiveMapperHelper.java | 8 ++- .../websocket/TikTokWebSocketClient.java | 4 +- .../websocket/TikTokWebSocketListener.java | 28 ++++---- .../TikTokWebSocketOfflineClient.java | 3 +- .../listener/TikTokListenersManagerTest.java | 19 +++--- .../jwdeveloper/tiktok/GiftsExample.java | 2 - 16 files changed, 121 insertions(+), 83 deletions(-) create mode 100644 API/src/main/java/io/github/jwdeveloper/tiktok/annotations/Priority.java rename API/src/main/java/io/github/jwdeveloper/tiktok/websocket/{SocketClient.java => LiveSocketClient.java} (93%) diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/annotations/Priority.java b/API/src/main/java/io/github/jwdeveloper/tiktok/annotations/Priority.java new file mode 100644 index 0000000..fd46874 --- /dev/null +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/annotations/Priority.java @@ -0,0 +1,18 @@ +package io.github.jwdeveloper.tiktok.annotations; +/** + * HIGHEST 1 + * HIGH 2 + * NORMAL 3 + * LOW 4 + * LOWEST 5 + */ + +public enum Priority { + LOWEST(2), LOW(1), NORMAL(0), HIGH(-1), HIGHEST(-2); + + public int priorityValue; + + Priority(int value) { + this.priorityValue = value; + } +} \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/annotations/TikTokEventObserver.java b/API/src/main/java/io/github/jwdeveloper/tiktok/annotations/TikTokEventObserver.java index 109af2d..a029b37 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/annotations/TikTokEventObserver.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/annotations/TikTokEventObserver.java @@ -26,7 +26,13 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) -public @interface TikTokEventObserver -{ +public @interface TikTokEventObserver { + Priority priority() default Priority.NORMAL; + + /** + * when true, action is invoked on the another thread + * @return + */ + boolean async(); } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenersManager.java b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenersManager.java index 09f430a..523df3e 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenersManager.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenersManager.java @@ -27,14 +27,13 @@ import java.util.List; /** * You can dynamically add or removing TikTokEventListener * - * @see TikTokEventListener * */ public interface ListenersManager { - List getListeners(); + List getListeners(); - void addListener(TikTokEventListener listener); + void addListener(Object listener); - void removeListener(TikTokEventListener listener); + void removeListener(Object listener); } diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java index f230100..6760829 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokEventListener.java @@ -40,7 +40,7 @@ import io.github.jwdeveloper.tiktok.live.LiveClient; * {@code * public static class CustomListener implements TikTokEventListener * { - * @TikTokEventObserver + * @TikTokEventObserver * public void onError(LiveClient liveClient, TikTokErrorEvent event) * { * System.out.println(event.getException().getMessage()); @@ -67,7 +67,9 @@ import io.github.jwdeveloper.tiktok.live.LiveClient; * } * */ -public interface TikTokEventListener -{ +//TODO I think this interface can be removed, since we are using, +//annotation @TikTokEventHandler to check methods that are events +@Deprecated(forRemoval = true, since = "This interface is not longer needed, please remove it from your class") +public interface TikTokEventListener { } \ No newline at end of file diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/LiveClientBuilder.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/LiveClientBuilder.java index 26c6004..93a05df 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/LiveClientBuilder.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/builder/LiveClientBuilder.java @@ -54,12 +54,11 @@ public interface LiveClientBuilder extends EventsBuilder { LiveClientBuilder configure(Consumer onConfigure); /** - * @see TikTokEventListener * Adding events listener class, its fancy way to register events without using lamda method * but actual method in class that implements TikTokEventListener * @return */ - LiveClientBuilder addListener(TikTokEventListener listener); + LiveClientBuilder addListener(Object listener); /** diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/websocket/SocketClient.java b/API/src/main/java/io/github/jwdeveloper/tiktok/websocket/LiveSocketClient.java similarity index 93% rename from API/src/main/java/io/github/jwdeveloper/tiktok/websocket/SocketClient.java rename to API/src/main/java/io/github/jwdeveloper/tiktok/websocket/LiveSocketClient.java index 241c34c..dca7979 100644 --- a/API/src/main/java/io/github/jwdeveloper/tiktok/websocket/SocketClient.java +++ b/API/src/main/java/io/github/jwdeveloper/tiktok/websocket/LiveSocketClient.java @@ -24,9 +24,8 @@ package io.github.jwdeveloper.tiktok.websocket; import io.github.jwdeveloper.tiktok.data.requests.LiveConnectionData; import io.github.jwdeveloper.tiktok.live.LiveClient; -import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse; -public interface SocketClient { +public interface LiveSocketClient { void start(LiveConnectionData.Response webcastResponse, LiveClient tikTokLiveClient); void stop(); } 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 1ce47d6..98fc3f9 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java @@ -36,7 +36,7 @@ import io.github.jwdeveloper.tiktok.listener.*; import io.github.jwdeveloper.tiktok.live.*; import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse; import io.github.jwdeveloper.tiktok.models.ConnectionState; -import io.github.jwdeveloper.tiktok.websocket.SocketClient; +import io.github.jwdeveloper.tiktok.websocket.LiveSocketClient; import lombok.Getter; import java.util.Base64; @@ -49,7 +49,7 @@ public class TikTokLiveClient implements LiveClient { private final TikTokRoomInfo roomInfo; private final LiveHttpClient httpClient; - private final SocketClient webSocketClient; + private final LiveSocketClient webSocketClient; private final LiveEventsHandler tikTokEventHandler; private final LiveClientSettings clientSettings; private final ListenersManager listenersManager; @@ -62,7 +62,7 @@ public class TikTokLiveClient implements LiveClient GiftsManager giftsManager, TikTokRoomInfo tikTokLiveMeta, LiveHttpClient tiktokHttpClient, - SocketClient webSocketClient, + LiveSocketClient webSocketClient, LiveEventsHandler tikTokEventHandler, LiveClientSettings clientSettings, ListenersManager listenersManager, 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 581b28b..c28cd27 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java @@ -52,7 +52,7 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { protected final LiveClientSettings clientSettings; protected final LiveEventsHandler eventHandler; - protected final List listeners; + protected final List listeners; protected final List> onCustomMappings; protected final List> onCustomDependencies; @@ -75,7 +75,7 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { return this; } - public TikTokLiveClientBuilder addListener(TikTokEventListener listener) { + public TikTokLiveClientBuilder addListener(Object listener) { if (listener != null) listeners.add(listener); return this; @@ -97,6 +97,7 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { if (clientSettings.getHostName().startsWith("@")) clientSettings.setHostName(clientSettings.getHostName().substring(1)); + //TODO 250 Magic number if (clientSettings.getPingInterval() < 250) throw new TikTokLiveException("Minimum allowed ping interval is 250 millseconds"); @@ -124,20 +125,23 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder { //messages dependance.registerSingleton(LiveEventsHandler.class, eventHandler); - dependance.registerSingleton(LiveMessagesHandler.class,TikTokLiveMessageHandler.class); + dependance.registerSingleton(LiveMessagesHandler.class, TikTokLiveMessageHandler.class); //listeners - dependance.registerSingletonList(TikTokEventListener.class, (e) -> listeners); - dependance.registerSingleton(ListenersManager.class, TikTokListenersManager.class); + dependance.registerSingleton(ListenersManager.class, container -> + { + var eventHandlers = (LiveEventsHandler) container.find(LiveEventsHandler.class); + return new TikTokListenersManager(listeners, eventHandlers); + }); //networking dependance.registerSingleton(HttpClientFactory.class); dependance.registerSingleton(TikTokWebSocketPingingTask.class); if (clientSettings.isOffline()) { - dependance.registerSingleton(SocketClient.class, TikTokWebSocketOfflineClient.class); + dependance.registerSingleton(LiveSocketClient.class, TikTokWebSocketOfflineClient.class); dependance.registerSingleton(LiveHttpClient.class, TikTokLiveHttpOfflineClient.class); } else { - dependance.registerSingleton(SocketClient.class, TikTokWebSocketClient.class); + dependance.registerSingleton(LiveSocketClient.class, TikTokWebSocketClient.class); dependance.registerSingleton(LiveHttpClient.class, TikTokLiveHttpClient.class); } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenerBindingModel.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenerBindingModel.java index a6fee10..a8394e9 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenerBindingModel.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/ListenerBindingModel.java @@ -33,8 +33,7 @@ import java.util.Map; @Value public class ListenerBindingModel { - - TikTokEventListener listener; + Object listener; Map, List>> events; } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java index ca981b7..03534e1 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManager.java @@ -23,7 +23,6 @@ package io.github.jwdeveloper.tiktok.listener; -import io.github.jwdeveloper.tiktok.TikTokLiveEventHandler; import io.github.jwdeveloper.tiktok.annotations.TikTokEventObserver; import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; import io.github.jwdeveloper.tiktok.exceptions.TikTokEventListenerMethodException; @@ -32,30 +31,31 @@ import io.github.jwdeveloper.tiktok.live.LiveClient; import io.github.jwdeveloper.tiktok.live.LiveEventsHandler; import io.github.jwdeveloper.tiktok.live.builder.EventConsumer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class TikTokListenersManager implements ListenersManager { private final LiveEventsHandler eventObserver; private final List bindingModels; + private final ExecutorService executorService; - public TikTokListenersManager(List listeners, LiveEventsHandler tikTokEventHandler) { + public TikTokListenersManager(List listeners, LiveEventsHandler tikTokEventHandler) { this.eventObserver = tikTokEventHandler; this.bindingModels = new ArrayList<>(listeners.size()); for (var listener : listeners) { addListener(listener); } + executorService = Executors.newFixedThreadPool(4); } @Override - public List getListeners() { + public List getListeners() { return bindingModels.stream().map(ListenerBindingModel::getListener).toList(); } @Override - public void addListener(TikTokEventListener listener) { + public void addListener(Object listener) { var alreadyExists = bindingModels.stream().filter(e -> e.getListener() == listener).findAny(); if (alreadyExists.isPresent()) { throw new TikTokLiveException("Listener " + listener.getClass() + " has already been registered"); @@ -72,7 +72,7 @@ public class TikTokListenersManager implements ListenersManager { } @Override - public void removeListener(TikTokEventListener listener) { + public void removeListener(Object listener) { var optional = bindingModels.stream().filter(e -> e.getListener() == listener).findAny(); if (optional.isEmpty()) { return; @@ -89,29 +89,41 @@ public class TikTokListenersManager implements ListenersManager { bindingModels.remove(optional.get()); } - private ListenerBindingModel bindToEvents(TikTokEventListener listener) { - + private ListenerBindingModel bindToEvents(Object listener) { var clazz = listener.getClass(); - var methods = Arrays.stream(clazz.getDeclaredMethods()).filter(m -> - m.getParameterCount() == 2 && - m.isAnnotationPresent(TikTokEventObserver.class)).toList(); + var methods = Arrays.stream(clazz.getDeclaredMethods()) + .filter(m -> + m.getParameterCount() >= 1 && + m.isAnnotationPresent(TikTokEventObserver.class)) + .toList(); var eventsMap = new HashMap, List>>(); for (var method : methods) { - var liveclientClass = method.getParameterTypes()[0]; - var eventClass = method.getParameterTypes()[1]; - - if (!LiveClient.class.isAssignableFrom(liveclientClass) && !liveclientClass.equals(LiveClient.class)) { - throw new TikTokEventListenerMethodException("Method " + method.getName() + "() 1st parameter must be instance of " + LiveClient.class.getName() - + " | Invalid parameter class: "+liveclientClass.getName()); - } - - if (!TikTokEvent.class.isAssignableFrom(eventClass) && !eventClass.equals(TikTokEvent.class)) { - throw new TikTokEventListenerMethodException("Method " + method.getName() + "() 2nd parameter must be instance of " + TikTokEvent.class.getName() - + " | Invalid parameter class: "+eventClass.getName()); + var annotation = method.getAnnotation(TikTokEventObserver.class); + var tiktokEventsParameters = Arrays.stream(method.getParameters()) + .filter(parameter -> + TikTokEvent.class.isAssignableFrom(parameter.getType()) || + parameter.getType().equals(TikTokEvent.class)) + .toList(); + if (tiktokEventsParameters.size() != 1) { + throw new TikTokEventListenerMethodException("Method " + method.getName() + "() must have only one parameter that inherits from class " + TikTokEvent.class.getName()); } + var eventType = tiktokEventsParameters.get(0).getType(); EventConsumer eventMethodRef = (liveClient, event) -> { + if (annotation.async()) { + executorService.submit(() -> + { + try { + method.setAccessible(true); + method.invoke(listener, liveClient, event); + } catch (Exception e) { + throw new TikTokEventListenerMethodException(e); + } + }); + return; + } + try { method.setAccessible(true); method.invoke(listener, liveClient, event); @@ -119,7 +131,7 @@ public class TikTokListenersManager implements ListenersManager { throw new TikTokEventListenerMethodException(e); } }; - eventsMap.computeIfAbsent(eventClass, (a) -> new ArrayList<>()).add(eventMethodRef); + eventsMap.computeIfAbsent(eventType, (a) -> new ArrayList<>()).add(eventMethodRef); } return new ListenerBindingModel(listener, eventsMap); } diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperHelper.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperHelper.java index b7ea1eb..4f5cc5a 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperHelper.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperHelper.java @@ -29,6 +29,9 @@ import io.github.jwdeveloper.tiktok.utils.ProtoBufferObject; import io.github.jwdeveloper.tiktok.utils.ProtocolUtils; public class TikTokLiveMapperHelper implements LiveMapperHelper { + + private static final String PACKAGE_PREFIX = "io.github.jwdeveloper.tiktok.messages.webcast."; + private final TikTokGenericEventMapper genericMapper; public TikTokLiveMapperHelper(TikTokGenericEventMapper genericMapper) { @@ -39,6 +42,7 @@ public class TikTokLiveMapperHelper implements LiveMapperHelper { public T bytesToWebcastObject(byte[] bytes, Class messageClass) { try { var parsingMethod = genericMapper.getParsingMethod(messageClass); + //NULL is passed, since Parsing method is Static var sourceObject = parsingMethod.invoke(null, bytes); return (T) sourceObject; } catch (Exception e) { @@ -49,7 +53,7 @@ public class TikTokLiveMapperHelper implements LiveMapperHelper { @Override public Object bytesToWebcastObject(byte[] bytes, String messageName) { try { - var packageName = "io.github.jwdeveloper.tiktok.messages.webcast." + messageName; + var packageName = PACKAGE_PREFIX + messageName; var clazz = Class.forName(packageName); return bytesToWebcastObject(bytes, (Class) clazz); } catch (Exception e) { @@ -60,7 +64,7 @@ public class TikTokLiveMapperHelper implements LiveMapperHelper { @Override public boolean isMessageHasProtoClass(String messageName) { try { - var packageName = "io.github.jwdeveloper.tiktok.messages.webcast." + messageName; + var packageName = PACKAGE_PREFIX + messageName; Class.forName(packageName); return true; } catch (Exception e) { 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 0b251b3..a4d36c5 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,8 +22,6 @@ */ 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; import io.github.jwdeveloper.tiktok.data.settings.*; @@ -38,7 +36,7 @@ import java.net.Proxy; import java.security.cert.X509Certificate; import java.util.HashMap; -public class TikTokWebSocketClient implements SocketClient { +public class TikTokWebSocketClient implements LiveSocketClient { private final LiveClientSettings clientSettings; private final LiveMessagesHandler messageHandler; private final LiveEventsHandler tikTokEventHandler; diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java index 2699cd5..1d10d90 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketListener.java @@ -23,7 +23,6 @@ package io.github.jwdeveloper.tiktok.websocket; import com.google.protobuf.ByteString; -import io.github.jwdeveloper.tiktok.*; import io.github.jwdeveloper.tiktok.data.events.*; import io.github.jwdeveloper.tiktok.exceptions.TikTokProtocolBufferException; import io.github.jwdeveloper.tiktok.live.LiveClient; @@ -40,9 +39,9 @@ import java.util.*; public class TikTokWebSocketListener extends WebSocketClient { - private final LiveMessagesHandler messageHandler; - private final LiveEventsHandler tikTokEventHandler; - private final LiveClient tikTokLiveClient; + private final LiveMessagesHandler messagesHandler; + private final LiveEventsHandler eventHandler; + private final LiveClient liveClient; public TikTokWebSocketListener(URI serverUri, Map httpHeaders, @@ -51,9 +50,9 @@ public class TikTokWebSocketListener extends WebSocketClient { LiveEventsHandler tikTokEventHandler, LiveClient tikTokLiveClient) { super(serverUri, new Draft_6455(), httpHeaders, connectTimeout); - this.messageHandler = messageHandler; - this.tikTokEventHandler = tikTokEventHandler; - this.tikTokLiveClient = tikTokLiveClient; + this.messagesHandler = messageHandler; + this.eventHandler = tikTokEventHandler; + this.liveClient = tikTokLiveClient; } @Override @@ -61,7 +60,7 @@ public class TikTokWebSocketListener extends WebSocketClient { try { handleBinary(bytes.array()); } catch (Exception e) { - tikTokEventHandler.publish(tikTokLiveClient, new TikTokErrorEvent(e)); + eventHandler.publish(liveClient, new TikTokErrorEvent(e)); } if (isOpen()) { sendPing(); @@ -85,12 +84,12 @@ public class TikTokWebSocketListener extends WebSocketClient { this.send(pushFrameBuilder.build().toByteArray()); } } - messageHandler.handle(tikTokLiveClient, webcastResponse); + messagesHandler.handle(liveClient, webcastResponse); } @Override public void onOpen(ServerHandshake serverHandshake) { - tikTokEventHandler.publish(tikTokLiveClient, new TikTokConnectedEvent()); + eventHandler.publish(liveClient, new TikTokConnectedEvent()); if (isOpen()) { sendPing(); } @@ -98,13 +97,13 @@ public class TikTokWebSocketListener extends WebSocketClient { @Override public void onClose(int code, String reason, boolean remote) { - tikTokEventHandler.publish(tikTokLiveClient, new TikTokDisconnectedEvent(reason)); - tikTokLiveClient.disconnect(); + eventHandler.publish(liveClient, new TikTokDisconnectedEvent(reason)); + liveClient.disconnect(); } @Override public void onError(Exception error) { - tikTokEventHandler.publish(tikTokLiveClient, new TikTokErrorEvent(error)); + eventHandler.publish(liveClient, new TikTokErrorEvent(error)); if (isOpen()) { sendPing(); } @@ -132,6 +131,7 @@ public class TikTokWebSocketListener extends WebSocketClient { @Override public void onMessage(String s) { - // System.err.println(s); + //TODO we are not using this method, however I wounder if there might be + //so messages that are send as String from TikTok, for example some Jsons } } \ No newline at end of file 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 993491b..496b7ef 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 @@ -22,14 +22,13 @@ */ package io.github.jwdeveloper.tiktok.websocket; -import io.github.jwdeveloper.tiktok.TikTokLiveEventHandler; import io.github.jwdeveloper.tiktok.data.events.TikTokConnectedEvent; import io.github.jwdeveloper.tiktok.data.events.TikTokDisconnectedEvent; import io.github.jwdeveloper.tiktok.data.requests.LiveConnectionData; import io.github.jwdeveloper.tiktok.live.LiveClient; import io.github.jwdeveloper.tiktok.live.LiveEventsHandler; -public class TikTokWebSocketOfflineClient implements SocketClient { +public class TikTokWebSocketOfflineClient implements LiveSocketClient { private final LiveEventsHandler handler; private LiveClient liveClient; diff --git a/Client/src/test/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManagerTest.java b/Client/src/test/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManagerTest.java index 5fe8df1..4e5cd97 100644 --- a/Client/src/test/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManagerTest.java +++ b/Client/src/test/java/io/github/jwdeveloper/tiktok/listener/TikTokListenersManagerTest.java @@ -23,6 +23,7 @@ package io.github.jwdeveloper.tiktok.listener; import io.github.jwdeveloper.tiktok.TikTokLiveEventHandler; +import io.github.jwdeveloper.tiktok.annotations.Priority; import io.github.jwdeveloper.tiktok.annotations.TikTokEventObserver; import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent; import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftEvent; @@ -48,23 +49,23 @@ class TikTokListenersManagerTest { @BeforeEach void setUp() { eventObserver = Mockito.mock(TikTokLiveEventHandler.class); - List listeners = new ArrayList<>(); + List listeners = new ArrayList<>(); tikTokListenersManager = new TikTokListenersManager(listeners, eventObserver); } @Test void addListener() { - TikTokEventListener listener =new TikTokEventListenerTest(); + Object listener =new TikTokEventListenerTest(); tikTokListenersManager.addListener(listener); - List listeners = tikTokListenersManager.getListeners(); + List listeners = tikTokListenersManager.getListeners(); assertEquals(1, listeners.size()); assertSame(listener, listeners.get(0)); } @Test void addListener_alreadyRegistered_throwsException() { - TikTokEventListener listener = new TikTokEventListenerTest(); + Object listener = new TikTokEventListenerTest(); tikTokListenersManager.addListener(listener); Exception exception = assertThrows(TikTokLiveException.class, () -> { @@ -76,22 +77,22 @@ class TikTokListenersManagerTest { @Test void removeListener() { - TikTokEventListener listener = new TikTokEventListenerTest(); + Object listener = new TikTokEventListenerTest(); tikTokListenersManager.addListener(listener); tikTokListenersManager.removeListener(listener); - List listeners = tikTokListenersManager.getListeners(); + List listeners = tikTokListenersManager.getListeners(); assertTrue(listeners.isEmpty()); } @Test void removeListener_notRegistered_doesNotThrow() { - TikTokEventListener listener = new TikTokEventListenerTest(); + Object listener = new TikTokEventListenerTest(); assertDoesNotThrow(() -> tikTokListenersManager.removeListener(listener)); } - public static class TikTokEventListenerTest implements TikTokEventListener + public static class TikTokEventListenerTest { @TikTokEventObserver public void onJoin(LiveClient client, TikTokJoinEvent joinEvent) @@ -99,7 +100,7 @@ class TikTokListenersManagerTest { } - @TikTokEventObserver + @TikTokEventObserver(priority = Priority.NORMAL,async=true) public void onGift(LiveClient client, TikTokGiftEvent giftMessageEvent) { diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/GiftsExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/GiftsExample.java index bd56d3d..732f436 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/GiftsExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/GiftsExample.java @@ -29,8 +29,6 @@ public class GiftsExample { public static void main(String[] args) { var giftsManager = TikTokLive.gifts(); - - var giftsList = giftsManager.toList(); for (var gift : giftsList) { System.out.println("Gift: " + gift);