diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/ClientSettings.java b/API/src/main/java/io/github/jwdeveloper/tiktok/ClientSettings.java
index d0fc367..c2a8c02 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/ClientSettings.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/ClientSettings.java
@@ -12,16 +12,7 @@ public class ClientSettings {
///
/// Timeout for Connections
///
-
private Duration timeout;
- ///
- /// Polling-Interval for Socket-Connection
- ///
- /// Proxy for Connection
- ///
// public RotatingProxy Proxy;
///
@@ -35,6 +26,11 @@ public class ClientSettings {
///
private boolean retryOnConnectionFailure;
+ ///
+ /// Wait to connect again for selected amount of time
+ ///
+ private Duration retryConnectionTimeout;
+
///
/// Whether to handle Messages received from Room when Connecting
///
@@ -59,12 +55,6 @@ public class ClientSettings {
///
private boolean printMessageData;
- ///
- /// Whether to check Messages for Unparsed Data
- ///
- private boolean checkForUnparsedData;
-
-
///
/// Tiktok user name
///
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/Constants.java b/API/src/main/java/io/github/jwdeveloper/tiktok/Constants.java
index 5f0cf8d..d959207 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/Constants.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/Constants.java
@@ -40,14 +40,13 @@ public class Constants {
public static ClientSettings DefaultClientSettings() {
var clientSettings = new ClientSettings();
clientSettings.setTimeout(Duration.ofSeconds(DEFAULT_TIMEOUT));
- clientSettings.setPollingInterval(Duration.ofSeconds(DEFAULT_POLLTIME));
clientSettings.setClientLanguage("en-US");
clientSettings.setHandleExistingMessagesOnConnect(true);
clientSettings.setDownloadGiftInfo(true);
- clientSettings.setRetryOnConnectionFailure(true);
- clientSettings.setPrintToConsole(true);
+ clientSettings.setRetryOnConnectionFailure(false);
+ clientSettings.setRetryConnectionTimeout(Duration.ofSeconds(1));
+ clientSettings.setPrintToConsole(false);
clientSettings.setLogLevel(Level.ALL);
- clientSettings.setCheckForUnparsedData(false);
clientSettings.setPrintMessageData(false);
clientSettings.setClientParameters(Constants.DefaultClientParams());
return clientSettings;
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokEventBuilder.java b/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokEventBuilder.java
index b25600c..11df854 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokEventBuilder.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokEventBuilder.java
@@ -1,95 +1,94 @@
package io.github.jwdeveloper.tiktok.events;
import io.github.jwdeveloper.tiktok.events.messages.*;
-
import java.util.function.Consumer;
public interface TikTokEventBuilder {
- T onUnhandledSocial(Consumer event);
+ T onUnhandledSocial(TikTokEventConsumer event);
- T onLinkMicFanTicket(Consumer event);
+ T onLinkMicFanTicket(TikTokEventConsumer event);
- T onEnvelope(Consumer event);
+ T onEnvelope(TikTokEventConsumer event);
- T onShopMessage(Consumer event);
+ T onShopMessage(TikTokEventConsumer event);
- T onDetectMessage(Consumer event);
+ T onDetectMessage(TikTokEventConsumer event);
- T onLinkLayerMessage(Consumer event);
+ T onLinkLayerMessage(TikTokEventConsumer event);
- T onConnected(Consumer event);
+ T onConnected(TikTokEventConsumer event);
- T onCaption(Consumer event);
+ T onCaption(TikTokEventConsumer event);
- T onQuestion(Consumer event);
+ T onQuestion(TikTokEventConsumer event);
- T onRoomPinMessage(Consumer event);
+ T onRoomPinMessage(TikTokEventConsumer event);
- T onRoomMessage(Consumer event);
+ T onRoomMessage(TikTokEventConsumer event);
- T onLivePaused(Consumer event);
+ T onLivePaused(TikTokEventConsumer event);
- T onLike(Consumer event);
+ T onLike(TikTokEventConsumer event);
- T onLinkMessage(Consumer event);
+ T onLinkMessage(TikTokEventConsumer event);
- T onBarrageMessage(Consumer event);
+ T onBarrageMessage(TikTokEventConsumer event);
- T onGiftMessage(Consumer event);
+ T onGiftMessage(TikTokEventConsumer event);
- T onLinkMicArmies(Consumer event);
+ T onLinkMicArmies(TikTokEventConsumer event);
- T onEmote(Consumer event);
+ T onEmote(TikTokEventConsumer event);
- T onUnauthorizedMember(Consumer event);
+ T onUnauthorizedMember(TikTokEventConsumer event);
- T onInRoomBanner(Consumer event);
+ T onInRoomBanner(TikTokEventConsumer event);
- T onLinkMicMethod(Consumer event);
+ T onLinkMicMethod(TikTokEventConsumer event);
- T onSubscribe(Consumer event);
+ T onSubscribe(TikTokEventConsumer event);
- T onPollMessage(Consumer event);
+ T onPollMessage(TikTokEventConsumer event);
- T onFollow(Consumer event);
+ T onFollow(TikTokEventConsumer event);
- T onRoomViewerData(Consumer event);
+ T onRoomViewerData(TikTokEventConsumer event);
- T onGoalUpdate(Consumer event);
+ T onGoalUpdate(TikTokEventConsumer event);
- T onComment(Consumer event);
+ T onComment(TikTokEventConsumer event);
- T onRankUpdate(Consumer event);
+ T onRankUpdate(TikTokEventConsumer event);
- T onIMDelete(Consumer event);
+ T onIMDelete(TikTokEventConsumer event);
- T onLiveEnded(Consumer event);
+ T onLiveEnded(TikTokEventConsumer event);
- T onError(Consumer event);
+ T onError(TikTokEventConsumer event);
- T onUnhandled(Consumer event);
+ T onUnhandled(TikTokEventConsumer event);
- T onJoin(Consumer event);
+ T onJoin(TikTokEventConsumer event);
- T onRankText(Consumer event);
+ T onRankText(TikTokEventConsumer event);
- T onShare(Consumer event);
+ T onShare(TikTokEventConsumer event);
- T onUnhandledMember(Consumer event);
+ T onUnhandledMember(TikTokEventConsumer event);
- T onSubNotify(Consumer event);
+ T onSubNotify(TikTokEventConsumer event);
- T onLinkMicBattle(Consumer event);
+ T onLinkMicBattle(TikTokEventConsumer event);
- T onDisconnected(Consumer event);
+ T onDisconnected(TikTokEventConsumer event);
- T onGiftBroadcast(Consumer event);
+ T onGiftBroadcast(TikTokEventConsumer event);
- T onUnhandledControl(Consumer event);
+ T onUnhandledControl(TikTokEventConsumer event);
- T onEvent(Consumer event);
+ T onEvent(TikTokEventConsumer event);
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokLiveEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokEventConsumer.java
similarity index 72%
rename from API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokLiveEvent.java
rename to API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokEventConsumer.java
index 57ecd9a..1156f4a 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokLiveEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/events/TikTokEventConsumer.java
@@ -2,7 +2,7 @@ package io.github.jwdeveloper.tiktok.events;
import io.github.jwdeveloper.tiktok.live.LiveClient;
-public interface TikTokLiveEvent
+public interface TikTokEventConsumer
{
void onEvent(LiveClient liveClient, T event);
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokGiftMessageEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokGiftMessageEvent.java
index 5beec96..c07c862 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokGiftMessageEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokGiftMessageEvent.java
@@ -3,38 +3,39 @@ package io.github.jwdeveloper.tiktok.events.messages;
import io.github.jwdeveloper.tiktok.annotations.Nullable;
import io.github.jwdeveloper.tiktok.events.TikTokEvent;
import io.github.jwdeveloper.tiktok.events.objects.Gift;
+import io.github.jwdeveloper.tiktok.events.objects.TikTokGift;
import io.github.jwdeveloper.tiktok.events.objects.User;
import io.github.jwdeveloper.tiktok.messages.WebcastGiftMessage;
import lombok.Getter;
@Getter
public class TikTokGiftMessageEvent extends TikTokEvent {
- private final Gift gift;
- @Nullable
- private User sender;
+ private final Gift gift;
- private final String purchaseId;
+ @Nullable
+ private User sender;
- private final String receipt;
+ private final String purchaseId;
- private final Integer amount;
+ private final String receipt;
- private final Boolean streakFinished;
+ private final Integer amount;
- private final Integer streakIndex;
+ private final Boolean streakFinished;
- public TikTokGiftMessageEvent(WebcastGiftMessage msg) {
- super(msg.getHeader());;
- gift = new Gift(msg.getGiftDetails());
- if(msg.hasSender())
- {
- sender = new User(msg.getSender());
+ private final Integer streakIndex;
+
+ public TikTokGiftMessageEvent(WebcastGiftMessage msg) {
+ super(msg.getHeader());
+ gift = new Gift(msg.getGiftDetails());
+ if (msg.hasSender()) {
+ sender = new User(msg.getSender());
+ }
+ purchaseId = msg.getLogId();
+ receipt = msg.getReceiptJson();
+ amount = msg.getAmount();
+ streakFinished = msg.getRepeatEnd();
+ streakIndex = msg.getRepeatCount();
}
- purchaseId = msg.getLogId();
- receipt = msg.getReceiptJson();
- amount = msg.getAmount();
- streakFinished = msg.getRepeatEnd();
- streakIndex = msg.getRepeatCount();
- }
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokRankUpdateEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokRankUpdateEvent.java
index 752e25c..36d54bc 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokRankUpdateEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/events/messages/TikTokRankUpdateEvent.java
@@ -20,10 +20,15 @@ public class TikTokRankUpdateEvent extends TikTokEvent {
var rankData = msg.getData().getRankings();
eventType = rankData.getType();
label = rankData.getLabel();
- rank = rankData.getDetails(0).getLabel();
+ if(rankData.getDetailsList().isEmpty())
+ {
+ rank = "";
+ }
+ else
+ {
+ rank = rankData.getDetails(0).getLabel();
+ }
color = rankData.getColor().getColor();
-
-
}
public TikTokRankUpdateEvent(WebcastRankUpdateMessage msg) {
@@ -31,7 +36,14 @@ public class TikTokRankUpdateEvent extends TikTokEvent {
var rankData = msg.getData().getRankData();
eventType = rankData.getType();
label = rankData.getLabel();
- rank = rankData.getDetails(0).getLabel();
+ if(rankData.getDetailsList().isEmpty())
+ {
+ rank = "";
+ }
+ else
+ {
+ rank = rankData.getDetails(0).getLabel();
+ }
color = rankData.getColor().getColor();
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokLiveMessageException.java b/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokLiveMessageException.java
new file mode 100644
index 0000000..18f5736
--- /dev/null
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokLiveMessageException.java
@@ -0,0 +1,33 @@
+package io.github.jwdeveloper.tiktok.exceptions;
+
+import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
+import lombok.Getter;
+
+import java.util.Base64;
+
+public class TikTokLiveMessageException extends TikTokLiveException {
+
+ @Getter
+ private final WebcastResponse.Message webcastMessage;
+ @Getter
+ private final WebcastResponse webcastResponse;
+
+
+ public TikTokLiveMessageException(WebcastResponse.Message message,
+ WebcastResponse webcastResponse,
+ Throwable cause) {
+ super("Error while handling Message: " + message.getType() + ": \n", cause);
+ this.webcastMessage = message;
+ this.webcastResponse = webcastResponse;
+ }
+
+ public void messageToBase64()
+ {
+ var decoded = Base64.getEncoder().encodeToString(webcastMessage.getBinary().toByteArray());
+ }
+
+ public void webcastResponseToBase64()
+ {
+ var decoded = Base64.getEncoder().encodeToString(webcastResponse.toByteArray());
+ }
+}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokLiveMessageParsingException.java b/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokLiveMessageParsingException.java
deleted file mode 100644
index 1a1c7a9..0000000
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokLiveMessageParsingException.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package io.github.jwdeveloper.tiktok.exceptions;
-
-public class TikTokLiveMessageParsingException extends TikTokLiveException
-{
- public TikTokLiveMessageParsingException() {
- }
-
- public TikTokLiveMessageParsingException(String message) {
- super(message);
- }
-
- public TikTokLiveMessageParsingException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public TikTokLiveMessageParsingException(Throwable cause) {
- super(cause);
- }
-
- public TikTokLiveMessageParsingException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- }
-}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokLiveOfflineHostException.java b/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokLiveOfflineHostException.java
new file mode 100644
index 0000000..b5090d4
--- /dev/null
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokLiveOfflineHostException.java
@@ -0,0 +1,8 @@
+package io.github.jwdeveloper.tiktok.exceptions;
+
+public class TikTokLiveOfflineHostException extends TikTokLiveException
+{
+ public TikTokLiveOfflineHostException(String message) {
+ super(message);
+ }
+}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokMessageMappingException.java b/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokMessageMappingException.java
new file mode 100644
index 0000000..c63c40d
--- /dev/null
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokMessageMappingException.java
@@ -0,0 +1,15 @@
+package io.github.jwdeveloper.tiktok.exceptions;
+
+
+public class TikTokMessageMappingException extends TikTokLiveException
+{
+ public TikTokMessageMappingException(Class> inputClazz, Class> outputClass, Throwable throwable)
+ {
+ super("Unable to handle mapping from class: " + inputClazz.getSimpleName() + " to class " + outputClass.getSimpleName(),throwable);
+ }
+
+ public TikTokMessageMappingException(Class> inputClazz, Class> outputClass, String message)
+ {
+ super("Unable to handle mapping from class: " + inputClazz.getSimpleName() + " to class " + outputClass.getSimpleName()+": "+message);
+ }
+}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokProtocolBufferException.java b/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokProtocolBufferException.java
new file mode 100644
index 0000000..7b5e721
--- /dev/null
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/exceptions/TikTokProtocolBufferException.java
@@ -0,0 +1,15 @@
+package io.github.jwdeveloper.tiktok.exceptions;
+
+import lombok.Getter;
+
+public class TikTokProtocolBufferException extends TikTokLiveException
+{
+ @Getter
+ private final byte[] bytes;
+
+ public TikTokProtocolBufferException(String message, byte[] bytes, Throwable cause)
+ {
+ super(message, cause);
+ this.bytes = bytes;
+ }
+}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/handler/TikTokMessageHandler.java b/API/src/main/java/io/github/jwdeveloper/tiktok/handler/TikTokMessageHandler.java
new file mode 100644
index 0000000..d102f3b
--- /dev/null
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/handler/TikTokMessageHandler.java
@@ -0,0 +1,10 @@
+package io.github.jwdeveloper.tiktok.handler;
+
+
+import io.github.jwdeveloper.tiktok.events.TikTokEvent;
+import io.github.jwdeveloper.tiktok.messages.WebcastResponse;
+
+public interface TikTokMessageHandler
+{
+ TikTokEvent handle(WebcastResponse.Message message) throws Exception;
+}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/http/Resource/ClientFetchDataResponse.java b/API/src/main/java/io/github/jwdeveloper/tiktok/http/Resource/ClientFetchDataResponse.java
deleted file mode 100644
index bfe2e6a..0000000
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/http/Resource/ClientFetchDataResponse.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package io.github.jwdeveloper.tiktok.http.Resource;
-
-import lombok.Data;
-
-@Data
-public class ClientFetchDataResponse {
-}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/live/GiftManager.java b/API/src/main/java/io/github/jwdeveloper/tiktok/live/GiftManager.java
new file mode 100644
index 0000000..1e20618
--- /dev/null
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/live/GiftManager.java
@@ -0,0 +1,14 @@
+package io.github.jwdeveloper.tiktok.live;
+
+import io.github.jwdeveloper.tiktok.events.objects.TikTokGift;
+import io.github.jwdeveloper.tiktok.models.GiftId;
+import io.github.jwdeveloper.tiktok.models.gifts.TikTokGiftInfo;
+
+import java.util.Map;
+
+public interface GiftManager
+{
+ Map getGiftsInfo();
+
+ Map getActiveGifts();
+}
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 cdc7f5c..43fb9d9 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
@@ -6,5 +6,6 @@ public interface LiveClient {
void disconnect();
+ GiftManager getGiftManager();
LiveRoomInfo getRoomInfo();
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/models/GiftId.java b/API/src/main/java/io/github/jwdeveloper/tiktok/models/GiftId.java
index 382ccf9..bce712d 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/models/GiftId.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/models/GiftId.java
@@ -7,7 +7,7 @@ import lombok.Data;
@AllArgsConstructor
public class GiftId
{
- public long Gift;
+ private long giftId;
- public String UserName;
+ private String userName;
}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/models/GiftStrike.java b/API/src/main/java/io/github/jwdeveloper/tiktok/models/GiftStrike.java
new file mode 100644
index 0000000..4f984f3
--- /dev/null
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/models/GiftStrike.java
@@ -0,0 +1,6 @@
+package io.github.jwdeveloper.tiktok.models;
+
+public enum GiftStrike
+{
+ BEGIN, UPDATE, ENDED
+}
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/models/gifts/DefaultFormat.java b/API/src/main/java/io/github/jwdeveloper/tiktok/models/gifts/DefaultFormat.java
index 0501399..6383180 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/models/gifts/DefaultFormat.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/models/gifts/DefaultFormat.java
@@ -3,14 +3,13 @@ package io.github.jwdeveloper.tiktok.models.gifts;
import lombok.Data;
@Data
-public class DefaultFormat
-{
- private boolean bold ;
- private String color ;
- private int font_size ;
- private boolean italic ;
- private int italic_angle ;
- private boolean use_highlight_color ;
- private boolean use_remote_color ;
- private int weight ;
+public class DefaultFormat {
+ private boolean bold;
+ private String color;
+ private int font_size;
+ private boolean italic;
+ private int italic_angle;
+ private boolean use_highlight_color;
+ private boolean use_remote_color;
+ private int weight;
}
\ No newline at end of file
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/models/gifts/DisplayText.java b/API/src/main/java/io/github/jwdeveloper/tiktok/models/gifts/DisplayText.java
index d218682..aea8dec 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/models/gifts/DisplayText.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/models/gifts/DisplayText.java
@@ -5,10 +5,9 @@ import lombok.Data;
import java.util.List;
@Data
-public class DisplayText
-{
- private DefaultFormat default_format ;
- private String default_pattern ;
- private String key ;
- private List