diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java
index a1516be..5388d15 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokCommentEvent.java
@@ -47,11 +47,23 @@ public class TikTokCommentEvent extends TikTokHeaderEvent {
public TikTokCommentEvent(WebcastChatMessage msg) {
super(msg.getCommon());
- user = User.map(msg.getUser(),msg.getUserIdentity());
+ user = User.map(msg.getUser(), msg.getUserIdentity());
text = msg.getContent();
visibleToSender = msg.getVisibleToSender();
getUserLanguage = msg.getContentLanguage();
mentionedUser = User.map(msg.getAtUser());
pictures = msg.getEmotesListList().stream().map(e -> Picture.map(e.getEmote().getImage())).toList();
}
+
+
+ public static TikTokCommentEvent of(String userName, String message) {
+ var builder = WebcastChatMessage.newBuilder();
+ builder.setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder()
+ .setNickname(userName)
+ .build());
+ builder.setContentLanguage("en");
+ builder.setVisibleToSender(true);
+ builder.setContent(message);
+ return new TikTokCommentEvent(builder.build());
+ }
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokSubscribeEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokSubscribeEvent.java
index b545eba..fde3819 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokSubscribeEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/TikTokSubscribeEvent.java
@@ -36,10 +36,10 @@ import lombok.Getter;
*/
@Getter
@EventMeta(eventType = EventType.Message)
-public class TikTokSubscribeEvent extends TikTokHeaderEvent
-{
+public class TikTokSubscribeEvent extends TikTokHeaderEvent {
private final User user;
+
public TikTokSubscribeEvent(WebcastMemberMessage msg) {
super(msg.getCommon());
user = User.map(msg.getUser());
@@ -52,4 +52,11 @@ public class TikTokSubscribeEvent extends TikTokHeaderEvent
user.addAttribute(UserAttribute.Subscriber);
}
+ public static TikTokSubscribeEvent of(String userName) {
+ return new TikTokSubscribeEvent(WebcastMemberMessage.newBuilder()
+ .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder()
+ .setNickname(userName)
+ .build())
+ .build());
+ }
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftComboEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftComboEvent.java
index ea5eb18..6736566 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftComboEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftComboEvent.java
@@ -23,6 +23,7 @@
package io.github.jwdeveloper.tiktok.data.events.gift;
import io.github.jwdeveloper.tiktok.annotations.*;
+import io.github.jwdeveloper.tiktok.data.models.Picture;
import io.github.jwdeveloper.tiktok.data.models.gifts.*;
import io.github.jwdeveloper.tiktok.data.models.users.User;
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastGiftMessage;
@@ -32,7 +33,7 @@ import lombok.Getter;
/**
* Triggered every time gift is sent
*
- * @see GiftSendType it has 3 states
+ * @see GiftComboStateType it has 3 states
*
*
Example when user sends gift with combo
* >Combo: 1 -> comboState = GiftSendType.Begin
@@ -45,10 +46,21 @@ import lombok.Getter;
@EventMeta(eventType = EventType.Message)
@Getter
public class TikTokGiftComboEvent extends TikTokGiftEvent {
- private final GiftSendType comboState;
+ private final GiftComboStateType comboState;
- public TikTokGiftComboEvent(Gift gift, User host, WebcastGiftMessage msg, GiftSendType comboState) {
+ public TikTokGiftComboEvent(Gift gift, User host, WebcastGiftMessage msg, GiftComboStateType comboState) {
super(gift, host, msg);
this.comboState = comboState;
}
+
+ public static TikTokGiftComboEvent of(Gift gift, int combo, GiftComboStateType comboState) {
+ return new TikTokGiftComboEvent(
+ gift,
+ new User(0L, "Test", new Picture("")),
+ WebcastGiftMessage
+ .newBuilder()
+ .setComboCount(combo)
+ .build(),
+ comboState);
+ }
}
\ No newline at end of file
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftEvent.java
index 2f0b46f..3b3cd0b 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/gift/TikTokGiftEvent.java
@@ -25,6 +25,7 @@ package io.github.jwdeveloper.tiktok.data.events.gift;
import io.github.jwdeveloper.tiktok.annotations.*;
import io.github.jwdeveloper.tiktok.data.events.common.TikTokHeaderEvent;
+import io.github.jwdeveloper.tiktok.data.models.Picture;
import io.github.jwdeveloper.tiktok.data.models.gifts.*;
import io.github.jwdeveloper.tiktok.data.models.users.User;
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastGiftMessage;
@@ -55,4 +56,20 @@ public class TikTokGiftEvent extends TikTokHeaderEvent {
}
combo = msg.getComboCount();
}
+
+ public TikTokGiftEvent(Gift gift) {
+ this.gift = gift;
+ user = new User(0L, "sender", new Picture(""));
+ toUser = new User(0L, "receiver", new Picture(""));
+ combo = 1;
+ }
+
+
+ public static TikTokGiftEvent of(Gift gift) {
+ return new TikTokGiftEvent(gift);
+ }
+
+ public static TikTokGiftEvent of(String name, int id, int diamonds) {
+ return TikTokGiftEvent.of(new Gift(id, name, diamonds, ""));
+ }
}
\ No newline at end of file
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java
index c1715d5..5cbe573 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokFollowEvent.java
@@ -24,8 +24,10 @@ package io.github.jwdeveloper.tiktok.data.events.social;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
+import io.github.jwdeveloper.tiktok.data.events.TikTokSubscribeEvent;
import io.github.jwdeveloper.tiktok.data.events.common.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.data.models.users.User;
+import io.github.jwdeveloper.tiktok.messages.webcast.WebcastMemberMessage;
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastSocialMessage;
import lombok.Value;
@@ -45,4 +47,12 @@ public class TikTokFollowEvent extends TikTokHeaderEvent
totalFollowers = msg.getFollowCount();
}
+ public static TikTokFollowEvent of(String userName)
+ {
+ return new TikTokFollowEvent(WebcastSocialMessage.newBuilder()
+ .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder()
+ .setNickname(userName)
+ .build())
+ .build());
+ }
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokJoinEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokJoinEvent.java
index 700e27a..d55a764 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokJoinEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokJoinEvent.java
@@ -26,6 +26,7 @@ import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
import io.github.jwdeveloper.tiktok.data.events.common.TikTokHeaderEvent;
import io.github.jwdeveloper.tiktok.data.models.users.User;
+import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLikeMessage;
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastMemberMessage;
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastSocialMessage;
import lombok.Getter;
@@ -47,4 +48,13 @@ public class TikTokJoinEvent extends TikTokHeaderEvent {
user = User.map(msg.getUser());
totalUsers = msg.getMemberCount();
}
+
+ public static TikTokJoinEvent of(String userName)
+ {
+ return new TikTokJoinEvent(WebcastMemberMessage.newBuilder()
+ .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder()
+ .setNickname(userName)
+ .build())
+ .build());
+ }
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokLikeEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokLikeEvent.java
index 6c64270..ce93b44 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokLikeEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/social/TikTokLikeEvent.java
@@ -57,4 +57,15 @@ public class TikTokLikeEvent extends TikTokHeaderEvent
likes = msg.getCount();
totalLikes = msg.getTotal();
}
+
+ public static TikTokLikeEvent of(String userName, int likes)
+ {
+ return new TikTokLikeEvent(WebcastLikeMessage.newBuilder()
+ .setCount(likes)
+ .setTotal(likes)
+ .setUser(io.github.jwdeveloper.tiktok.messages.data.User.newBuilder()
+ .setNickname(userName)
+ .build())
+ .build());
+ }
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftSendType.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftComboStateType.java
similarity index 83%
rename from API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftSendType.java
rename to API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftComboStateType.java
index c14c82b..c084189 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftSendType.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/gifts/GiftComboStateType.java
@@ -22,17 +22,16 @@
*/
package io.github.jwdeveloper.tiktok.data.models.gifts;
-public enum GiftSendType
-{
+//TODO it should be called GiftComboStateType
+public enum GiftComboStateType {
Finished,
Begin,
Active;
- public static GiftSendType fromNumber(long number)
- {
+ public static GiftComboStateType fromNumber(long number) {
return switch ((int) number) {
- case 1, 2, 4 -> GiftSendType.Active;
- default -> GiftSendType.Finished;
+ case 1, 2, 4 -> GiftComboStateType.Active;
+ default -> GiftComboStateType.Finished;
};
}
}
\ No newline at end of file
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/LiveData.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/LiveData.java
index 9e72b94..c884f06 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/LiveData.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/requests/LiveData.java
@@ -35,6 +35,7 @@ public class LiveData {
}
@Data
+ @AllArgsConstructor
public static class Response {
private String json;
private LiveStatus liveStatus;
@@ -45,6 +46,11 @@ public class LiveData {
private boolean ageRestricted;
private User host;
private LiveType liveType;
+ public Response() {
+
+ }
+
+
}
public enum LiveStatus {
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java
index af8e992..3ac9b9d 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/settings/LiveClientSettings.java
@@ -35,10 +35,20 @@ public class LiveClientSettings {
/**
+ * TODO: give better description
+ *
+ * sets client in the offline mode, so it do not connects to TikTok servers
+ * it makes sense to use it when you are testing client with your custom events
+ */
+ private boolean offline;
+
+ /**
+ * TODO: give better description
+ *
* Determines if gifts data is downloaded before TikTokLive starts,
* when `false` then client.giftManager() does not contain initial gifts
*/
- private boolean fetchGifts;
+ private boolean fetchGifts = true;
/**
* ISO-Language for Client
@@ -76,14 +86,13 @@ public class LiveClientSettings {
private HttpClientSettings httpSettings;
/**
- * Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId
- * documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages
+ * Optional: Sometimes not every messages from chat are send to TikTokLiveJava to fix this issue you can set sessionId
+ * documentation how to obtain sessionId https://github.com/isaackogan/TikTok-Live-Connector#send-chat-messages
*/
private String sessionId;
/**
* Optional: By default roomID is fetched before connect to live, but you can set it manually
- *
*/
private String roomId;
@@ -92,8 +101,7 @@ public class LiveClientSettings {
*/
private String apiKey;
- public static LiveClientSettings createDefault()
- {
+ public static LiveClientSettings createDefault() {
var httpSettings = new HttpClientSettings();
httpSettings.getParams().putAll(DefaultClientParams());
httpSettings.getHeaders().putAll(DefaultRequestHeaders());
@@ -166,4 +174,6 @@ public class LiveClientSettings {
headers.put("Accept-Language", "en-US,en; q=0.9");
return headers;
}
+
+
}
\ No newline at end of file
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java
index 3161079..cce7a2a 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/LiveClient.java
@@ -61,6 +61,8 @@ public interface LiveClient {
*/
void publishEvent(TikTokEvent event);
+ void publishMessage(String base64);
+
/**
* Get information about gifts
*/
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 9826653..0ec4dff 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java
@@ -33,6 +33,7 @@ import io.github.jwdeveloper.tiktok.data.requests.LiveConnectionData;
import io.github.jwdeveloper.tiktok.data.requests.LiveData;
import io.github.jwdeveloper.tiktok.data.requests.LiveUserData;
import io.github.jwdeveloper.tiktok.exceptions.*;
+import io.github.jwdeveloper.tiktok.http.LiveHttpClient;
import io.github.jwdeveloper.tiktok.listener.ListenersManager;
import io.github.jwdeveloper.tiktok.listener.TikTokListenersManager;
import io.github.jwdeveloper.tiktok.live.GiftsManager;
@@ -48,7 +49,7 @@ import java.util.logging.Logger;
public class TikTokLiveClient implements LiveClient {
private final TikTokRoomInfo liveRoomInfo;
- private final TikTokLiveHttpClient httpClient;
+ private final LiveHttpClient httpClient;
private final SocketClient webSocketClient;
private final TikTokLiveEventHandler tikTokEventHandler;
private final LiveClientSettings clientSettings;
@@ -58,7 +59,7 @@ public class TikTokLiveClient implements LiveClient {
public TikTokLiveClient(GiftsManager giftsManager,
TikTokRoomInfo tikTokLiveMeta,
- TikTokLiveHttpClient tiktokHttpClient,
+ LiveHttpClient tiktokHttpClient,
SocketClient webSocketClient,
TikTokLiveEventHandler tikTokEventHandler,
LiveClientSettings clientSettings,
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 306febc..b4ffd82 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java
@@ -45,6 +45,7 @@ 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.websocket.TikTokWebSocketClient;
+import io.github.jwdeveloper.tiktok.websocket.TikTokWebSocketOfflineClient;
import java.util.*;
import java.util.concurrent.CompletableFuture;
@@ -54,7 +55,7 @@ import java.util.logging.Logger;
public class TikTokLiveClientBuilder implements LiveClientBuilder {
protected final LiveClientSettings clientSettings;
- protected final TikTokLiveEventHandler tikTokEventHandler;
+ protected final TikTokLiveEventHandler eventHandler;
protected final List listeners;
protected Consumer onCustomMappings;
protected Logger logger;
@@ -63,7 +64,7 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder {
public TikTokLiveClientBuilder(String userName) {
this.clientSettings = LiveClientSettings.createDefault();
this.clientSettings.setHostName(userName);
- this.tikTokEventHandler = new TikTokLiveEventHandler();
+ this.eventHandler = new TikTokLiveEventHandler();
this.listeners = new ArrayList<>();
this.onCustomMappings = (e) -> {
};
@@ -109,27 +110,30 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder {
var tiktokRoomInfo = new TikTokRoomInfo();
tiktokRoomInfo.setHostName(clientSettings.getHostName());
- var listenerManager = new TikTokListenersManager(listeners, tikTokEventHandler);
+ var listenerManager = new TikTokListenersManager(listeners, eventHandler);
var httpClientFactory = new HttpClientFactory(clientSettings);
- var tikTokLiveHttpClient = new TikTokLiveHttpClient(httpClientFactory, clientSettings);
+ var liveHttpClient = clientSettings.isOffline() ?
+ new TikTokLiveHttpOfflineClient() :
+ new TikTokLiveHttpClient(httpClientFactory, clientSettings);
var eventsMapper = createMapper(giftsManager, tiktokRoomInfo);
- var messageHandler = new TikTokLiveMessageHandler(tikTokEventHandler, eventsMapper);
+ var messageHandler = new TikTokLiveMessageHandler(eventHandler, eventsMapper);
-
- var webSocketClient = new TikTokWebSocketClient(
- clientSettings,
- messageHandler,
- tikTokEventHandler);
+ var webSocketClient = clientSettings.isOffline() ?
+ new TikTokWebSocketOfflineClient(eventHandler) :
+ new TikTokWebSocketClient(
+ clientSettings,
+ messageHandler,
+ eventHandler);
return new TikTokLiveClient(
giftsManager,
tiktokRoomInfo,
- tikTokLiveHttpClient,
+ liveHttpClient,
webSocketClient,
- tikTokEventHandler,
+ eventHandler,
clientSettings,
listenerManager,
logger);
@@ -235,255 +239,255 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder {
}
public TikTokLiveClientBuilder onUnhandledSocial(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokUnhandledSocialEvent.class, event);
+ eventHandler.subscribe(TikTokUnhandledSocialEvent.class, event);
return this;
}
public LiveClientBuilder onChest(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokChestEvent.class, event);
+ eventHandler.subscribe(TikTokChestEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onLinkMicFanTicket(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokLinkMicFanTicketEvent.class, event);
+ eventHandler.subscribe(TikTokLinkMicFanTicketEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onEnvelope(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokEnvelopeEvent.class, event);
+ eventHandler.subscribe(TikTokEnvelopeEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onShop(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokShopEvent.class, event);
+ eventHandler.subscribe(TikTokShopEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onDetect(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokDetectEvent.class, event);
+ eventHandler.subscribe(TikTokDetectEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onLinkLayer(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokLinkLayerEvent.class, event);
+ eventHandler.subscribe(TikTokLinkLayerEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onConnected(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokConnectedEvent.class, event);
+ eventHandler.subscribe(TikTokConnectedEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onPreConnection(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokPreConnectionEvent.class, event);
+ eventHandler.subscribe(TikTokPreConnectionEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onCaption(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokCaptionEvent.class, event);
+ eventHandler.subscribe(TikTokCaptionEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onQuestion(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokQuestionEvent.class, event);
+ eventHandler.subscribe(TikTokQuestionEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onRoomPin(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokRoomPinEvent.class, event);
+ eventHandler.subscribe(TikTokRoomPinEvent.class, event);
return this;
}
@Override
public LiveClientBuilder onEvent(Class eventClass, EventConsumer event) {
- tikTokEventHandler.subscribe(eventClass, event);
+ eventHandler.subscribe(eventClass, event);
return this;
}
@Override
public TikTokLiveClientBuilder onRoomInfo(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokRoomInfoEvent.class, event);
+ eventHandler.subscribe(TikTokRoomInfoEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onLivePaused(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokLivePausedEvent.class, event);
+ eventHandler.subscribe(TikTokLivePausedEvent.class, event);
return this;
}
@Override
public TikTokLiveClientBuilder onLiveUnpaused(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokLiveUnpausedEvent.class, event);
+ eventHandler.subscribe(TikTokLiveUnpausedEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onLike(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokLikeEvent.class, event);
+ eventHandler.subscribe(TikTokLikeEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onLink(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokLinkEvent.class, event);
+ eventHandler.subscribe(TikTokLinkEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onBarrage(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokBarrageEvent.class, event);
+ eventHandler.subscribe(TikTokBarrageEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onGift(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokGiftEvent.class, event);
+ eventHandler.subscribe(TikTokGiftEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onGiftCombo(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokGiftComboEvent.class, event);
+ eventHandler.subscribe(TikTokGiftComboEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onLinkMicArmies(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokLinkMicArmiesEvent.class, event);
+ eventHandler.subscribe(TikTokLinkMicArmiesEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onEmote(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokEmoteEvent.class, event);
+ eventHandler.subscribe(TikTokEmoteEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onUnauthorizedMember(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokUnauthorizedMemberEvent.class, event);
+ eventHandler.subscribe(TikTokUnauthorizedMemberEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onInRoomBanner(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokInRoomBannerEvent.class, event);
+ eventHandler.subscribe(TikTokInRoomBannerEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onLinkMicMethod(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokLinkMicMethodEvent.class, event);
+ eventHandler.subscribe(TikTokLinkMicMethodEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onSubscribe(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokSubscribeEvent.class, event);
+ eventHandler.subscribe(TikTokSubscribeEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onPoll(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokPollEvent.class, event);
+ eventHandler.subscribe(TikTokPollEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onFollow(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokFollowEvent.class, event);
+ eventHandler.subscribe(TikTokFollowEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onComment(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokCommentEvent.class, event);
+ eventHandler.subscribe(TikTokCommentEvent.class, event);
return this;
}
@Override
public LiveClientBuilder onHttpResponse(EventConsumer action) {
- tikTokEventHandler.subscribe(TikTokHttpResponseEvent.class, action);
+ eventHandler.subscribe(TikTokHttpResponseEvent.class, action);
return this;
}
public TikTokLiveClientBuilder onGoalUpdate(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokGoalUpdateEvent.class, event);
+ eventHandler.subscribe(TikTokGoalUpdateEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onRankUpdate(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokRankUpdateEvent.class, event);
+ eventHandler.subscribe(TikTokRankUpdateEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onIMDelete(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokIMDeleteEvent.class, event);
+ eventHandler.subscribe(TikTokIMDeleteEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onLiveEnded(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokLiveEndedEvent.class, event);
+ eventHandler.subscribe(TikTokLiveEndedEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onError(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokErrorEvent.class, event);
+ eventHandler.subscribe(TikTokErrorEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onJoin(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokJoinEvent.class, event);
+ eventHandler.subscribe(TikTokJoinEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onRankText(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokRankTextEvent.class, event);
+ eventHandler.subscribe(TikTokRankTextEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onShare(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokShareEvent.class, event);
+ eventHandler.subscribe(TikTokShareEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onUnhandledMember(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokUnhandledMemberEvent.class, event);
+ eventHandler.subscribe(TikTokUnhandledMemberEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onSubNotify(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokSubNotifyEvent.class, event);
+ eventHandler.subscribe(TikTokSubNotifyEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onLinkMicBattle(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokLinkMicBattleEvent.class, event);
+ eventHandler.subscribe(TikTokLinkMicBattleEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onDisconnected(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokDisconnectedEvent.class, event);
+ eventHandler.subscribe(TikTokDisconnectedEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onUnhandledControl(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokUnhandledControlEvent.class, event);
+ eventHandler.subscribe(TikTokUnhandledControlEvent.class, event);
return this;
}
public TikTokLiveClientBuilder onEvent(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokEvent.class, event);
+ eventHandler.subscribe(TikTokEvent.class, event);
return this;
}
@Override
public TikTokLiveClientBuilder onWebsocketResponse(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokWebsocketResponseEvent.class, event);
+ eventHandler.subscribe(TikTokWebsocketResponseEvent.class, event);
return this;
}
@Override
public TikTokLiveClientBuilder onWebsocketMessage(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokWebsocketMessageEvent.class, event);
+ eventHandler.subscribe(TikTokWebsocketMessageEvent.class, event);
return this;
}
@Override
public TikTokLiveClientBuilder onWebsocketUnhandledMessage(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokWebsocketUnhandledMessageEvent.class, event);
+ eventHandler.subscribe(TikTokWebsocketUnhandledMessageEvent.class, event);
return this;
}
@Override
public TikTokLiveClientBuilder onReconnecting(EventConsumer event) {
- tikTokEventHandler.subscribe(TikTokReconnectingEvent.class, event);
+ eventHandler.subscribe(TikTokReconnectingEvent.class, event);
return this;
}
}
\ No newline at end of file
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java
new file mode 100644
index 0000000..c5fb961
--- /dev/null
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpOfflineClient.java
@@ -0,0 +1,45 @@
+package io.github.jwdeveloper.tiktok;
+
+import io.github.jwdeveloper.tiktok.data.models.Picture;
+import io.github.jwdeveloper.tiktok.data.models.users.User;
+import io.github.jwdeveloper.tiktok.data.requests.GiftsData;
+import io.github.jwdeveloper.tiktok.data.requests.LiveConnectionData;
+import io.github.jwdeveloper.tiktok.data.requests.LiveData;
+import io.github.jwdeveloper.tiktok.data.requests.LiveUserData;
+import io.github.jwdeveloper.tiktok.http.LiveHttpClient;
+import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse;
+
+import java.net.URI;
+import java.util.List;
+
+public class TikTokLiveHttpOfflineClient implements LiveHttpClient {
+ @Override
+ public GiftsData.Response fetchGiftsData() {
+ return new GiftsData.Response("", List.of());
+ }
+
+ @Override
+ public LiveUserData.Response fetchLiveUserData(LiveUserData.Request request) {
+ return new LiveUserData.Response("", LiveUserData.UserStatus.Live, "offline_room_id", 0);
+ }
+
+ @Override
+ public LiveData.Response fetchLiveData(LiveData.Request request) {
+ return new LiveData.Response("",
+ LiveData.LiveStatus.HostOnline,
+ "offline live",
+ 0,
+ 0,
+ 0,
+ false,
+ new User(0L, "offline user", new Picture("")),
+ LiveData.LiveType.SOLO);
+ }
+
+ @Override
+ public LiveConnectionData.Response fetchLiveConnectionData(LiveConnectionData.Request request) {
+ return new LiveConnectionData.Response("",
+ URI.create("https://example.live"),
+ WebcastResponse.newBuilder().build());
+ }
+}
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokGiftEventHandler.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokGiftEventHandler.java
index 899e13f..0547994 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokGiftEventHandler.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/handlers/TikTokGiftEventHandler.java
@@ -58,40 +58,40 @@ public class TikTokGiftEventHandler {
public List handleGift(WebcastGiftMessage currentMessage) {
var userId = currentMessage.getUser().getId();
- var currentType = GiftSendType.fromNumber(currentMessage.getSendType());
+ var currentType = GiftComboStateType.fromNumber(currentMessage.getSendType());
var containsPreviousMessage = giftsMessages.containsKey(userId);
//If gift is not streakable just return onGift event
if (currentMessage.getGift().getType() != 1) {
- var comboEvent = getGiftComboEvent(currentMessage, GiftSendType.Finished);
+ var comboEvent = getGiftComboEvent(currentMessage, GiftComboStateType.Finished);
var giftEvent = getGiftEvent(currentMessage);
return List.of(comboEvent, giftEvent);
}
if (!containsPreviousMessage) {
- if (currentType == GiftSendType.Finished) {
+ if (currentType == GiftComboStateType.Finished) {
return List.of(getGiftEvent(currentMessage));
} else {
giftsMessages.put(userId, currentMessage);
- return List.of(getGiftComboEvent(currentMessage, GiftSendType.Begin));
+ return List.of(getGiftComboEvent(currentMessage, GiftComboStateType.Begin));
}
}
var previousMessage = giftsMessages.get(userId);
- var previousType = GiftSendType.fromNumber(previousMessage.getSendType());
- if (currentType == GiftSendType.Active &&
- previousType == GiftSendType.Active) {
+ var previousType = GiftComboStateType.fromNumber(previousMessage.getSendType());
+ if (currentType == GiftComboStateType.Active &&
+ previousType == GiftComboStateType.Active) {
giftsMessages.put(userId, currentMessage);
- return List.of(getGiftComboEvent(currentMessage, GiftSendType.Active));
+ return List.of(getGiftComboEvent(currentMessage, GiftComboStateType.Active));
}
- if (currentType == GiftSendType.Finished &&
- previousType == GiftSendType.Active) {
+ if (currentType == GiftComboStateType.Finished &&
+ previousType == GiftComboStateType.Active) {
giftsMessages.clear();
return List.of(
- getGiftComboEvent(currentMessage, GiftSendType.Finished),
+ getGiftComboEvent(currentMessage, GiftComboStateType.Finished),
getGiftEvent(currentMessage));
}
@@ -104,7 +104,7 @@ public class TikTokGiftEventHandler {
return new TikTokGiftEvent(gift, tikTokRoomInfo.getHost(), message);
}
- private TikTokGiftEvent getGiftComboEvent(WebcastGiftMessage message, GiftSendType state) {
+ private TikTokGiftEvent getGiftComboEvent(WebcastGiftMessage message, GiftComboStateType state) {
var gift = getGiftObject(message);
return new TikTokGiftComboEvent(gift, tikTokRoomInfo.getHost(), message, state);
}
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
new file mode 100644
index 0000000..d30dddc
--- /dev/null
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/websocket/TikTokWebSocketOfflineClient.java
@@ -0,0 +1,31 @@
+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;
+
+public class TikTokWebSocketOfflineClient implements SocketClient {
+
+ private final TikTokLiveEventHandler handler;
+ private LiveClient liveClient;
+
+ public TikTokWebSocketOfflineClient(TikTokLiveEventHandler handler) {
+ this.handler = handler;
+ }
+
+ @Override
+ public void start(LiveConnectionData.Response webcastResponse, LiveClient tikTokLiveClient) {
+ liveClient = tikTokLiveClient;
+ handler.publish(liveClient, new TikTokConnectedEvent());
+ }
+
+ @Override
+ public void stop() {
+ if (liveClient == null) {
+ return;
+ }
+ handler.publish(liveClient, new TikTokDisconnectedEvent());
+ }
+}
diff --git a/Client/src/test/java/io/github/jwdeveloper/tiktok/handlers/events/TikTokGiftEventHandlerTest.java b/Client/src/test/java/io/github/jwdeveloper/tiktok/handlers/events/TikTokGiftEventHandlerTest.java
index b77ca91..51d7c97 100644
--- a/Client/src/test/java/io/github/jwdeveloper/tiktok/handlers/events/TikTokGiftEventHandlerTest.java
+++ b/Client/src/test/java/io/github/jwdeveloper/tiktok/handlers/events/TikTokGiftEventHandlerTest.java
@@ -27,7 +27,7 @@ import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftComboEvent;
import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftEvent;
import io.github.jwdeveloper.tiktok.data.models.Picture;
import io.github.jwdeveloper.tiktok.data.models.gifts.Gift;
-import io.github.jwdeveloper.tiktok.data.models.gifts.GiftSendType;
+import io.github.jwdeveloper.tiktok.data.models.gifts.GiftComboStateType;
import io.github.jwdeveloper.tiktok.gifts.TikTokGiftsManager;
import io.github.jwdeveloper.tiktok.mappers.handlers.TikTokGiftEventHandler;
import io.github.jwdeveloper.tiktok.messages.data.GiftStruct;
@@ -40,7 +40,6 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import java.util.List;
-import java.util.logging.Logger;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@@ -99,9 +98,9 @@ class TikTokGiftEventHandlerTest {
Assertions.assertEquals(2, result3.size());
var event3 = (TikTokGiftComboEvent) result3.get(0);
- Assertions.assertEquals(GiftSendType.Begin, event1.getComboState());
- Assertions.assertEquals(GiftSendType.Active, event2.getComboState());
- Assertions.assertEquals(GiftSendType.Finished, event3.getComboState());
+ Assertions.assertEquals(GiftComboStateType.Begin, event1.getComboState());
+ Assertions.assertEquals(GiftComboStateType.Active, event2.getComboState());
+ Assertions.assertEquals(GiftComboStateType.Finished, event3.getComboState());
}
diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ChatMessageExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ChatMessageExample.java
deleted file mode 100644
index d7e69ac..0000000
--- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ChatMessageExample.java
+++ /dev/null
@@ -1,55 +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;
-
-import java.time.Duration;
-
-public class ChatMessageExample {
- public static void main(String[] args) {
-
-
- var roomData = TikTokLive.requests()
- .fetchLiveData("X");
-
- var gifts = TikTokLive.requests().fetchGiftsData();
-
-
- var user = TikTokLive.requests()
- .fetchLiveUserData("mark");
-
- TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME)
- .configure(clientSettings ->
- {
- clientSettings.setPrintToConsole(true);
- clientSettings.getHttpSettings().setTimeout(Duration.ofSeconds(21));
- })
- .onComment((liveClient, event) ->
- {
- System.out.println("Chat message: " + event.getUser().getName() + " " + event.getText());
- })
- .onWebsocketUnhandledMessage((liveClient, event) ->
- {
- liveClient.getLogger().info(event.getMessage().getMethod());
- }).buildAndConnect();
- }
-}
diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ConnectionExample.java
similarity index 96%
rename from Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java
rename to Examples/src/main/java/io/github/jwdeveloper/tiktok/ConnectionExample.java
index ca45379..9e7ebe5 100644
--- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/SimpleExample.java
+++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ConnectionExample.java
@@ -31,7 +31,7 @@ import java.io.IOException;
import java.time.Duration;
import java.util.logging.Level;
-public class SimpleExample {
+public class ConnectionExample {
public static String TIKTOK_HOSTNAME = "kvadromama_marina1";
public static void main(String[] args) throws IOException {
@@ -40,10 +40,10 @@ public class SimpleExample {
var gifts = TikTokLive.gifts();
- TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME)
+ TikTokLive.newClient(ConnectionExample.TIKTOK_HOSTNAME)
.configure(clientSettings ->
{
- clientSettings.setHostName(SimpleExample.TIKTOK_HOSTNAME); // This method is useful in case you want change hostname later
+ clientSettings.setHostName(ConnectionExample.TIKTOK_HOSTNAME); // This method is useful in case you want change hostname later
clientSettings.setClientLanguage("en"); // Language
clientSettings.setLogLevel(Level.ALL); // Log level
clientSettings.setPrintToConsole(true); // Printing all logs to console even if log level is Level.OFF
diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/CustomEventExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CustomEventExample.java
index ec38858..3e6ece2 100644
--- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/CustomEventExample.java
+++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CustomEventExample.java
@@ -39,7 +39,7 @@ public class CustomEventExample {
public static void main(String[] args)
{
- TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME)
+ TikTokLive.newClient(ConnectionExample.TIKTOK_HOSTNAME)
.configure(clientSettings ->
{
clientSettings.setPrintToConsole(true);
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
new file mode 100644
index 0000000..5771026
--- /dev/null
+++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/Events_And_Gifts_Testing_Example.java
@@ -0,0 +1,67 @@
+package io.github.jwdeveloper.tiktok;
+
+import io.github.jwdeveloper.tiktok.data.events.TikTokCommentEvent;
+import io.github.jwdeveloper.tiktok.data.events.TikTokSubNotifyEvent;
+import io.github.jwdeveloper.tiktok.data.events.TikTokSubscribeEvent;
+import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftComboEvent;
+import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftEvent;
+import io.github.jwdeveloper.tiktok.data.events.social.TikTokFollowEvent;
+import io.github.jwdeveloper.tiktok.data.events.social.TikTokJoinEvent;
+import io.github.jwdeveloper.tiktok.data.events.social.TikTokLikeEvent;
+import io.github.jwdeveloper.tiktok.data.models.gifts.GiftComboStateType;
+import io.github.jwdeveloper.tiktok.live.LiveClient;
+
+public class Events_And_Gifts_Testing_Example {
+ public static void main(String[] args) {
+ LiveClient client = TikTokLive.newClient(ConnectionExample.TIKTOK_HOSTNAME)
+ .configure(liveClientSettings ->
+ {
+ liveClientSettings.setOffline(true);
+ liveClientSettings.setPrintToConsole(true);
+ })
+ .onConnected((liveClient, event) ->
+ {
+ liveClient.getLogger().info("Connected");
+ })
+ .onDisconnected((liveClient, event) ->
+ {
+ liveClient.getLogger().info("Disconnected");
+ })
+ .onGiftCombo((liveClient, event) ->
+ {
+ liveClient.getLogger().info("New fake combo Gift: " + event.getGift());
+ })
+ .onGift((liveClient, event) ->
+ {
+ liveClient.getLogger().info("New fake Gift: " + event.getGift());
+ })
+ .build();
+
+ var gifts = TikTokLive.gifts();
+ var roseGift = gifts.getByName("Rose");
+
+ var fakeGift = TikTokGiftEvent.of(roseGift);
+ var fakeComboGift = TikTokGiftComboEvent.of(roseGift, 12, GiftComboStateType.Begin);
+
+ var fakeMessage = TikTokCommentEvent.of("Mark", "Hello world");
+
+ var fakeSubscriber = TikTokSubscribeEvent.of("Mark");
+ var fakeFollow = TikTokFollowEvent.of("Mark");
+ var fakeLike = TikTokLikeEvent.of("Mark", 12);
+ var fakeJoin = TikTokJoinEvent.of("Mark");
+
+ client.connect();
+
+ client.publishEvent(fakeGift);
+ client.publishEvent(fakeComboGift);
+ client.publishEvent(fakeMessage);
+ client.publishEvent(fakeSubscriber);
+ client.publishEvent(fakeFollow);
+ client.publishEvent(fakeLike);
+ client.publishEvent(fakeJoin);
+
+ client.disconnect();
+ }
+
+
+}
diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java
index b74638a..d12111e 100644
--- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java
+++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ListenerExample.java
@@ -48,7 +48,7 @@ public class ListenerExample
showLogo();
CustomListener customListener = new CustomListener();
- TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME)
+ TikTokLive.newClient(ConnectionExample.TIKTOK_HOSTNAME)
.addListener(customListener)
.buildAndConnect();
System.in.read();
diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java
index c911354..9db5c94 100644
--- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java
+++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/ProxyExample.java
@@ -26,7 +26,7 @@ import java.net.Proxy;
public class ProxyExample {
public static void main(String[] args) throws Exception {
- TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME)
+ TikTokLive.newClient(ConnectionExample.TIKTOK_HOSTNAME)
.configure(clientSettings -> {
clientSettings.setPrintToConsole(true);
clientSettings.getHttpSettings().configureProxy(proxySettings -> {
diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/testerExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/testerExample.java
deleted file mode 100644
index 5da54c3..0000000
--- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/testerExample.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package io.github.jwdeveloper.tiktok;
-
-public class testerExample {
-}
diff --git a/Tools-EventsCollector/pom.xml b/Tools-EventsCollector/pom.xml
deleted file mode 100644
index c6e91f4..0000000
--- a/Tools-EventsCollector/pom.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
- TikTokLiveJava
- io.github.jwdeveloper.tiktok
- 1.3.0-Release
-
- 4.0.0
-
- Tools-EventsCollector
-
-
- 16
- 16
- UTF-8
-
-
-
-
-
- org.xerial
- sqlite-jdbc
- 3.34.0
-
-
- org.jdbi
- jdbi3-core
- 3.23.0
-
-
- com.googlecode.protobuf-java-format
- protobuf-java-format
- 1.4
-
-
- org.jdbi
- jdbi3-sqlobject
- 3.23.0
-
-
- org.slf4j
- slf4j-simple
- 1.7.32
-
-
- io.github.jwdeveloper.tiktok
- Client
- ${project.version}
- compile
-
-
- io.github.jwdeveloper.tiktok
- Tools-ReadmeGenerator
- ${project.version}
- compile
-
-
-
-
-
\ No newline at end of file
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/TikTokLiveTools.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/TikTokLiveTools.java
deleted file mode 100644
index b305f6d..0000000
--- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/TikTokLiveTools.java
+++ /dev/null
@@ -1,65 +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.tools;
-
-import io.github.jwdeveloper.tiktok.tools.collector.client.TikTokDataCollectorBuilder;
-import io.github.jwdeveloper.tiktok.tools.collector.api.DataCollectorBuilder;
-import io.github.jwdeveloper.tiktok.tools.tester.TikTokDataTesterBuilder;
-import io.github.jwdeveloper.tiktok.tools.tester.api.DataTesterBuilder;
-
-public class TikTokLiveTools
-{
- /**
- *
- * @param databaseName dataCollector use sql-lite database to store message
- * if database not exits it creates new one
- * @return
- */
- public static DataCollectorBuilder createCollector(String databaseName)
- {
- return new TikTokDataCollectorBuilder(databaseName);
- }
-
- /**
- *
- * @param databaseName dataTester will read messages for database
- * before using dataTester, use dataCollector to create database
- * if database not exits exception will be thrown
- * @return
- */
- public static DataTesterBuilder createTester(String databaseName)
- {
- return new TikTokDataTesterBuilder(databaseName);
- }
-
- /**
- *
- * Returns browser application that collects and display Events, Messages, WebcastResponses
- * in online web editor so it's easier to read and analyze data structures
- * @return
- */
- public static void createWebViewer()
- {
-
- }
-}
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/DataCollector.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/DataCollector.java
deleted file mode 100644
index 52b3713..0000000
--- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/DataCollector.java
+++ /dev/null
@@ -1,33 +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.tools.collector.api;
-
-public interface DataCollector {
-
- void connect();
-
-
- void disconnect();
-
- void disconnect(boolean keepDatabase);
-}
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/DataCollectorBuilder.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/DataCollectorBuilder.java
deleted file mode 100644
index 74e05d4..0000000
--- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/DataCollectorBuilder.java
+++ /dev/null
@@ -1,44 +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.tools.collector.api;
-
-import io.github.jwdeveloper.tiktok.live.builder.LiveClientBuilder;
-import io.github.jwdeveloper.tiktok.tools.db.TikTokDatabase;
-
-import java.util.function.Consumer;
-
-public interface DataCollectorBuilder extends DataFilters {
- DataCollectorBuilder setOutputPath(String path);
- DataCollectorBuilder setSessionTag(String sessionTimestamp);
-
- DataCollectorBuilder setDatabase(TikTokDatabase database);
-
- DataCollectorBuilder configureLiveClient(Consumer consumer);
-
- DataCollectorBuilder addUser(String user);
-
- DataCollector buildAndRun();
-
- DataCollector build();
-
-}
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/DataFilters.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/DataFilters.java
deleted file mode 100644
index d1146e3..0000000
--- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/DataFilters.java
+++ /dev/null
@@ -1,35 +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.tools.collector.api;
-
-import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
-
-public interface DataFilters {
- T addMessageFilter(Class extends com.google.protobuf.GeneratedMessageV3> message);
-
- T addMessageFilter(String message);
-
- T addEventFilter(Class extends TikTokEvent> event);
-
- T addEventFilter(String event);
-}
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/TikTokDataCollectorModel.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/TikTokDataCollectorModel.java
deleted file mode 100644
index 47c9dfc..0000000
--- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/api/TikTokDataCollectorModel.java
+++ /dev/null
@@ -1,41 +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.tools.collector.api;
-
-import io.github.jwdeveloper.tiktok.live.builder.LiveClientBuilder;
-import lombok.Data;
-
-import java.util.List;
-import java.util.Set;
-import java.util.function.Consumer;
-
-@Data
-public class TikTokDataCollectorModel {
- private List users;
- private String outputPath;
- private String outputName;
- private Set eventsFilter;
- private Set messagesFilter;
- private String sessionTag ="";
- private Consumer onConfigureLiveClient;
-}
diff --git a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/client/MessagesManager.java b/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/client/MessagesManager.java
deleted file mode 100644
index 5859099..0000000
--- a/Tools-EventsCollector/src/main/java/io/github/jwdeveloper/tiktok/tools/collector/client/MessagesManager.java
+++ /dev/null
@@ -1,103 +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.tools.collector.client;
-
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-import io.github.jwdeveloper.tiktok.FilesUtility;
-import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse;
-import io.github.jwdeveloper.tiktok.utils.JsonUtil;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-import java.io.File;
-import java.lang.reflect.Type;
-import java.nio.file.Paths;
-import java.time.LocalDateTime;
-import java.util.*;
-import java.util.logging.Logger;
-
-public class MessagesManager {
-
- @Getter
- Map> messages;
- String outputName;
-
- int limit = 20;
- public MessagesManager(String outputName) {
- this.messages = new TreeMap<>();
- this.outputName = outputName;
- load();
- }
-
- public void addMessage(Logger logger, String host, WebcastResponse.Message message) {
- var name = message.getMethod();
- var payload = message.getPayload().toByteArray();
- var base64 = Base64.getEncoder().encodeToString(payload);
-
- if (!messages.containsKey(name)) {
- logger.info("New Message found! " + name);
- messages.put(name, new LinkedList<>());
- }
-
- var queue = messages.get(name);
- if (queue.size() > limit) {
- queue.remove();
- }
-
- queue.add(new MessageData(base64, host, LocalDateTime.now().toString()));
- save();
- }
-
- public String toJson() {
- return JsonUtil.toJson(messages);
- }
-
- public void load() {
- var file = new File(path());
- Type type = new TypeToken