mirror of
https://github.com/jwdeveloper/TikTokLiveJava.git
synced 2026-02-28 01:09:40 -05:00
Breaking changes:
'Gift': changed from class to enum, so now you can handle
incoming gifts in switch
`Events`
- new:
onGiftComboFinished
- Removed:
onGiftBrodcast
- Rename:
onGiftMessage -> onGift
onRoomPinMessage -> onRoomPin
onRoomMessage -> onRoom
onLinkMessage -> onLink
onBarrageMessage -> onBarrage
onPollMessage -> onPoll
onShopMessage -> onShop
onDetectMessage -> onDetect
`GiftManager`
added:
registerGift
findById
findByName
getGifts
removed:
getActiveGifts
This commit is contained in:
@@ -25,6 +25,8 @@ package io.github.jwdeveloper.tiktok.events;
|
|||||||
import io.github.jwdeveloper.tiktok.events.messages.*;
|
import io.github.jwdeveloper.tiktok.events.messages.*;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftComboFinishedEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftComboFinishedEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftEvent;
|
||||||
|
import io.github.jwdeveloper.tiktok.events.messages.room.TikTokRoomEvent;
|
||||||
|
import io.github.jwdeveloper.tiktok.events.messages.room.TikTokRoomUserInfoEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokFollowEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokFollowEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokJoinEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokJoinEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokLikeEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokLikeEvent;
|
||||||
@@ -54,6 +56,7 @@ public interface TikTokEventBuilder<T> {
|
|||||||
|
|
||||||
T onGift(TikTokEventConsumer<TikTokGiftEvent> event);
|
T onGift(TikTokEventConsumer<TikTokGiftEvent> event);
|
||||||
|
|
||||||
|
T onQuestion(TikTokEventConsumer<TikTokQuestionEvent> event);
|
||||||
|
|
||||||
T onSubscribe(TikTokEventConsumer<TikTokSubscribeEvent> event);
|
T onSubscribe(TikTokEventConsumer<TikTokSubscribeEvent> event);
|
||||||
|
|
||||||
@@ -80,7 +83,6 @@ public interface TikTokEventBuilder<T> {
|
|||||||
|
|
||||||
T onDisconnected(TikTokEventConsumer<TikTokDisconnectedEvent> event);
|
T onDisconnected(TikTokEventConsumer<TikTokDisconnectedEvent> event);
|
||||||
|
|
||||||
|
|
||||||
T onError(TikTokEventConsumer<TikTokErrorEvent> event);
|
T onError(TikTokEventConsumer<TikTokErrorEvent> event);
|
||||||
|
|
||||||
T onEvent(TikTokEventConsumer<TikTokEvent> event);
|
T onEvent(TikTokEventConsumer<TikTokEvent> event);
|
||||||
@@ -99,7 +101,7 @@ public interface TikTokEventBuilder<T> {
|
|||||||
|
|
||||||
//T onCaption(TikTokEventConsumer<TikTokCaptionEvent> event);
|
//T onCaption(TikTokEventConsumer<TikTokCaptionEvent> event);
|
||||||
|
|
||||||
//T onQuestion(TikTokEventConsumer<TikTokQuestionEvent> event);
|
|
||||||
|
|
||||||
//T onRoomPin(TikTokEventConsumer<TikTokRoomPinEvent> event);
|
//T onRoomPin(TikTokEventConsumer<TikTokRoomPinEvent> event);
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ public class TikTokBarrageEvent extends TikTokHeaderEvent {
|
|||||||
private final Picture rightIcon;
|
private final Picture rightIcon;
|
||||||
private final String eventName;
|
private final String eventName;
|
||||||
private final int duration;
|
private final int duration;
|
||||||
|
|
||||||
private BarrageParam barrageParam;
|
private BarrageParam barrageParam;
|
||||||
|
|
||||||
public TikTokBarrageEvent(WebcastBarrageMessage msg) {
|
public TikTokBarrageEvent(WebcastBarrageMessage msg) {
|
||||||
@@ -50,15 +51,7 @@ public class TikTokBarrageEvent extends TikTokHeaderEvent {
|
|||||||
backGround = Picture.map(msg.getBackground());
|
backGround = Picture.map(msg.getBackground());
|
||||||
rightIcon = Picture.map(msg.getRightIcon());
|
rightIcon = Picture.map(msg.getRightIcon());
|
||||||
duration = msg.getDuration();
|
duration = msg.getDuration();
|
||||||
switch (msg.getMsgType()) {
|
barrageParam = BarrageParam.map(msg);
|
||||||
case GRADEUSERENTRANCENOTIFICATION:
|
|
||||||
barrageParam = new UserGradeParam(msg.getUserGradeParam());
|
|
||||||
case FANSLEVELUPGRADE:
|
|
||||||
barrageParam = new FansLevelParam(msg.getFansLevelParam());
|
|
||||||
case SUBSCRIBEGIFT:
|
|
||||||
barrageParam = new SubscribeGiftParam(msg.getSubscribeGiftParam());
|
|
||||||
default:
|
|
||||||
barrageParam = new BarrageParam();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class TikTokCaptionEvent extends TikTokHeaderEvent {
|
|||||||
String text;
|
String text;
|
||||||
|
|
||||||
public TikTokCaptionEvent(WebcastCaptionMessage msg) {
|
public TikTokCaptionEvent(WebcastCaptionMessage msg) {
|
||||||
super(msg.getCommon());
|
super(msg.getCommon());
|
||||||
captionTimeStamp = msg.getTimeStamp();
|
captionTimeStamp = msg.getTimeStamp();
|
||||||
iSOLanguage = msg.getCaptionData().getLanguage();
|
iSOLanguage = msg.getCaptionData().getLanguage();
|
||||||
text = msg.getCaptionData().getText();
|
text = msg.getCaptionData().getText();
|
||||||
|
|||||||
@@ -28,11 +28,15 @@ import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
|
|||||||
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastImDeleteMessage;
|
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastImDeleteMessage;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@EventMeta(eventType = EventType.Message)
|
@EventMeta(eventType = EventType.Message)
|
||||||
public class TikTokIMDeleteEvent extends TikTokHeaderEvent {
|
public class TikTokIMDeleteEvent extends TikTokHeaderEvent {
|
||||||
|
|
||||||
|
List<Long> userIds;
|
||||||
public TikTokIMDeleteEvent(WebcastImDeleteMessage msg) {
|
public TikTokIMDeleteEvent(WebcastImDeleteMessage msg) {
|
||||||
super(msg.getHeader());
|
super(msg.getCommon());
|
||||||
|
this.userIds = msg.getDeleteUserIdsListList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import lombok.Getter;
|
|||||||
@EventMeta(eventType = EventType.Message)
|
@EventMeta(eventType = EventType.Message)
|
||||||
public class TikTokLinkMicFanTicketEvent extends TikTokHeaderEvent {
|
public class TikTokLinkMicFanTicketEvent extends TikTokHeaderEvent {
|
||||||
|
|
||||||
|
|
||||||
public TikTokLinkMicFanTicketEvent(WebcastLinkMicFanTicketMethod msg) {
|
public TikTokLinkMicFanTicketEvent(WebcastLinkMicFanTicketMethod msg) {
|
||||||
super(msg.getCommon());
|
super(msg.getCommon());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,22 +36,15 @@ Triggered every time someone asks a new question via the question feature.
|
|||||||
@EventMeta(eventType = EventType.Message)
|
@EventMeta(eventType = EventType.Message)
|
||||||
public class TikTokQuestionEvent extends TikTokHeaderEvent {
|
public class TikTokQuestionEvent extends TikTokHeaderEvent {
|
||||||
private final Long questionId;
|
private final Long questionId;
|
||||||
|
|
||||||
private final String text;
|
private final String text;
|
||||||
|
|
||||||
private final Long time;
|
private final Long time;
|
||||||
|
private final User user;
|
||||||
private User user;
|
|
||||||
|
|
||||||
|
|
||||||
public TikTokQuestionEvent(WebcastQuestionNewMessage msg) {
|
public TikTokQuestionEvent(WebcastQuestionNewMessage msg) {
|
||||||
super(msg.getCommon());
|
super(msg.getCommon());
|
||||||
var data = msg.getDetails();
|
var data = msg.getDetails();
|
||||||
questionId = data.getId();
|
questionId = data.getId();
|
||||||
text = data.getText();
|
text = data.getText();
|
||||||
time = data.getTimeStamp();
|
time = data.getTimeStamp();
|
||||||
if (data.hasUser()) {
|
user = User.map(data.getUser());
|
||||||
user = new User(data.getUser());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ public class TikTokShopEvent extends TikTokHeaderEvent {
|
|||||||
|
|
||||||
private final String shopName;
|
private final String shopName;
|
||||||
|
|
||||||
|
//Not working
|
||||||
public TikTokShopEvent(WebcastOecLiveShoppingMessage msg) {
|
public TikTokShopEvent(WebcastOecLiveShoppingMessage msg) {
|
||||||
super(msg.getCommon());
|
super(msg.getCommon());
|
||||||
var data = msg.getShopData();
|
var data = msg.getShopData();
|
||||||
|
|||||||
@@ -40,8 +40,6 @@ import lombok.Getter;
|
|||||||
public class TikTokGiftEvent extends TikTokHeaderEvent {
|
public class TikTokGiftEvent extends TikTokHeaderEvent {
|
||||||
private final Gift gift;
|
private final Gift gift;
|
||||||
private final User user;
|
private final User user;
|
||||||
private final String purchaseId;
|
|
||||||
private final String receipt;
|
|
||||||
private final int combo;
|
private final int combo;
|
||||||
private final boolean comboFinished;
|
private final boolean comboFinished;
|
||||||
private final int comboIndex;
|
private final int comboIndex;
|
||||||
@@ -49,9 +47,7 @@ public class TikTokGiftEvent extends TikTokHeaderEvent {
|
|||||||
public TikTokGiftEvent(Gift gift, WebcastGiftMessage msg) {
|
public TikTokGiftEvent(Gift gift, WebcastGiftMessage msg) {
|
||||||
super(msg.getCommon());
|
super(msg.getCommon());
|
||||||
this.gift = gift;
|
this.gift = gift;
|
||||||
user = User.map(msg.getUser());
|
user = User.map(msg.getUser(),msg.getUserIdentity());
|
||||||
purchaseId = msg.getOrderId();
|
|
||||||
receipt = msg.getMonitorExtra();
|
|
||||||
combo = msg.getComboCount();
|
combo = msg.getComboCount();
|
||||||
comboFinished = msg.getRepeatEnd() > 0;
|
comboFinished = msg.getRepeatEnd() > 0;
|
||||||
comboIndex = msg.getRepeatCount();
|
comboIndex = msg.getRepeatCount();
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
package io.github.jwdeveloper.tiktok.events.messages;
|
package io.github.jwdeveloper.tiktok.events.messages.room;
|
||||||
|
|
||||||
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
|
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
|
||||||
import io.github.jwdeveloper.tiktok.annotations.EventType;
|
import io.github.jwdeveloper.tiktok.annotations.EventType;
|
||||||
@@ -20,11 +20,12 @@
|
|||||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
package io.github.jwdeveloper.tiktok.events.messages;
|
package io.github.jwdeveloper.tiktok.events.messages.room;
|
||||||
|
|
||||||
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
|
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
|
||||||
import io.github.jwdeveloper.tiktok.annotations.EventType;
|
import io.github.jwdeveloper.tiktok.annotations.EventType;
|
||||||
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
|
import io.github.jwdeveloper.tiktok.events.base.TikTokHeaderEvent;
|
||||||
|
import io.github.jwdeveloper.tiktok.events.messages.TikTokCommentEvent;
|
||||||
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastRoomPinMessage;
|
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastRoomPinMessage;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
package io.github.jwdeveloper.tiktok.events.messages;
|
package io.github.jwdeveloper.tiktok.events.messages.room;
|
||||||
|
|
||||||
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
|
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
|
||||||
import io.github.jwdeveloper.tiktok.annotations.EventType;
|
import io.github.jwdeveloper.tiktok.annotations.EventType;
|
||||||
@@ -30,10 +30,9 @@ import java.util.UUID;
|
|||||||
public class Emote {
|
public class Emote {
|
||||||
String emoteId;
|
String emoteId;
|
||||||
Picture picture;
|
Picture picture;
|
||||||
UUID uuid;
|
|
||||||
|
|
||||||
public static Emote map(io.github.jwdeveloper.tiktok.messages.data.Emote input) {
|
public static Emote map(io.github.jwdeveloper.tiktok.messages.data.Emote input) {
|
||||||
return new Emote(input.getEmoteId(), Picture.map(input.getImage()), UUID.fromString(input.getUuid()));
|
return new Emote(input.getEmoteId(), Picture.map(input.getImage()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,9 @@ package io.github.jwdeveloper.tiktok.events.objects;
|
|||||||
import io.github.jwdeveloper.tiktok.events.objects.users.User;
|
import io.github.jwdeveloper.tiktok.events.objects.users.User;
|
||||||
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
|
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.Value;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -47,16 +49,14 @@ public class Text {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static TextPiece mapTextPiece(io.github.jwdeveloper.tiktok.messages.data.Text.TextPiece input)
|
public static TextPiece mapTextPiece(io.github.jwdeveloper.tiktok.messages.data.Text.TextPiece input) {
|
||||||
{
|
return switch (input.getType()) {
|
||||||
return switch (input.getType())
|
|
||||||
{
|
|
||||||
case 11 -> {
|
case 11 -> {
|
||||||
var user = User.map(input.getUserValue().getUser());
|
var user = User.map(input.getUserValue().getUser());
|
||||||
yield new UserTextPiece(user);
|
yield new UserTextPiece(user);
|
||||||
}
|
}
|
||||||
//case 12 -> new GiftTextPiece(input.getStringValue());
|
//case 12 -> new GiftTextPiece(input.getStringValue());
|
||||||
default -> throw new TikTokLiveException("Unknown text piece");
|
default -> new StringTextPiece(input.getStringValue());
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,8 +66,18 @@ public class Text {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public static class StringTextPiece extends TextPiece {
|
||||||
|
String text;
|
||||||
|
|
||||||
|
public StringTextPiece(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class UserTextPiece extends TextPiece {
|
public static class UserTextPiece extends TextPiece {
|
||||||
User user;
|
User user;
|
||||||
|
|
||||||
public UserTextPiece(User user) {
|
public UserTextPiece(User user) {
|
||||||
this.user = user;
|
this.user = user;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,17 @@
|
|||||||
*/
|
*/
|
||||||
package io.github.jwdeveloper.tiktok.events.objects.barrage;
|
package io.github.jwdeveloper.tiktok.events.objects.barrage;
|
||||||
|
|
||||||
public class BarrageParam
|
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastBarrageMessage;
|
||||||
{
|
|
||||||
|
|
||||||
|
public class BarrageParam {
|
||||||
|
|
||||||
|
//Figure out barrage type:11
|
||||||
|
public static BarrageParam map(WebcastBarrageMessage msg) {
|
||||||
|
return switch (msg.getMsgType()) {
|
||||||
|
case GRADEUSERENTRANCENOTIFICATION -> new UserGradeParam(msg.getUserGradeParam());
|
||||||
|
case FANSLEVELUPGRADE -> new FansLevelParam(msg.getFansLevelParam());
|
||||||
|
case SUBSCRIBEGIFT -> new SubscribeGiftParam(msg.getSubscribeGiftParam());
|
||||||
|
default -> new BarrageParam();
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,5 +29,5 @@ import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse;
|
|||||||
|
|
||||||
public interface TikTokMessageHandler
|
public interface TikTokMessageHandler
|
||||||
{
|
{
|
||||||
TikTokEvent handle(WebcastResponse.Message message) throws Exception;
|
TikTokEvent handle(byte[] messagePayload) throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -244,7 +244,6 @@ message WebcastEnvelopeMessage {
|
|||||||
|
|
||||||
// @EnvelopeInfo
|
// @EnvelopeInfo
|
||||||
// proto.webcast.im.EnvelopeMessage
|
// proto.webcast.im.EnvelopeMessage
|
||||||
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
|
|
||||||
message EnvelopeInfo {
|
message EnvelopeInfo {
|
||||||
string envelopeId = 1;
|
string envelopeId = 1;
|
||||||
int64 businessType = 2; // @warning Enum not found, should be BusinessType
|
int64 businessType = 2; // @warning Enum not found, should be BusinessType
|
||||||
@@ -283,8 +282,9 @@ message WebcastGoalUpdateMessage {
|
|||||||
// Message related to Chat-moderation?
|
// Message related to Chat-moderation?
|
||||||
//@WebcastImDeleteMessage
|
//@WebcastImDeleteMessage
|
||||||
message WebcastImDeleteMessage {
|
message WebcastImDeleteMessage {
|
||||||
Common header = 1;
|
Common common = 1;
|
||||||
bytes data = 3;
|
repeated int64 deleteMsgIdsList = 2;
|
||||||
|
repeated int64 deleteUserIdsList = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
//@WebcastInRoomBannerMessage
|
//@WebcastInRoomBannerMessage
|
||||||
@@ -708,4 +708,12 @@ message WebcastLinkLayerMessage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
message RoomVerifyMessage {
|
||||||
|
Common common = 1;
|
||||||
|
int32 action = 2;
|
||||||
|
string content = 3;
|
||||||
|
int64 noticeType = 4;
|
||||||
|
bool closeRoom = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,9 @@ import io.github.jwdeveloper.tiktok.events.messages.TikTokConnectedEvent;
|
|||||||
import io.github.jwdeveloper.tiktok.events.messages.TikTokDisconnectedEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.TikTokDisconnectedEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftComboFinishedEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftComboFinishedEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftEvent;
|
||||||
|
import io.github.jwdeveloper.tiktok.events.messages.room.TikTokRoomEvent;
|
||||||
|
import io.github.jwdeveloper.tiktok.events.messages.room.TikTokRoomPinEvent;
|
||||||
|
import io.github.jwdeveloper.tiktok.events.messages.room.TikTokRoomUserInfoEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokFollowEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokFollowEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokJoinEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokJoinEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokLikeEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokLikeEvent;
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public abstract class TikTokMessageHandler {
|
|||||||
|
|
||||||
public abstract void init();
|
public abstract void init();
|
||||||
|
|
||||||
public void registerMapping(Class<?> clazz, Function<WebcastResponse.Message, TikTokEvent> func) {
|
public void registerMapping(Class<?> clazz, Function<byte[], TikTokEvent> func) {
|
||||||
handlers.put(clazz.getSimpleName(), func::apply);
|
handlers.put(clazz.getSimpleName(), func::apply);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,6 +72,17 @@ public abstract class TikTokMessageHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public void handleSingleMessage(LiveClient client, String type, byte[] bytes) throws Exception {
|
||||||
|
|
||||||
|
if (!handlers.containsKey(type)) {
|
||||||
|
tikTokEventHandler.publish(client, new TikTokWebsocketUnhandledMessageEvent(WebcastResponse.Message.newBuilder().setMethod(type).build()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var handler = handlers.get(type);
|
||||||
|
var tiktokEvent = handler.handle(bytes);
|
||||||
|
tikTokEventHandler.publish(client, new TikTokWebsocketMessageEvent(tiktokEvent, WebcastResponse.Message.newBuilder().build()));
|
||||||
|
tikTokEventHandler.publish(client, tiktokEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public void handleSingleMessage(LiveClient client, WebcastResponse.Message message) throws Exception {
|
public void handleSingleMessage(LiveClient client, WebcastResponse.Message message) throws Exception {
|
||||||
@@ -85,15 +96,15 @@ public abstract class TikTokMessageHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var handler = handlers.get(methodName);
|
var handler = handlers.get(methodName);
|
||||||
var tiktokEvent = handler.handle(message);
|
var tiktokEvent = handler.handle(message.getPayload().toByteArray());
|
||||||
tikTokEventHandler.publish(client, new TikTokWebsocketMessageEvent(tiktokEvent, message));
|
tikTokEventHandler.publish(client, new TikTokWebsocketMessageEvent(tiktokEvent, message));
|
||||||
tikTokEventHandler.publish(client, tiktokEvent);
|
tikTokEventHandler.publish(client, tiktokEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected TikTokEvent mapMessageToEvent(Class<?> inputClazz, Class<?> outputClass, WebcastResponse.Message message) {
|
protected TikTokEvent mapMessageToEvent(Class<?> inputClazz, Class<?> outputClass, byte[] payload) {
|
||||||
try {
|
try {
|
||||||
var parseMethod = inputClazz.getDeclaredMethod("parseFrom", ByteString.class);
|
var parseMethod = inputClazz.getDeclaredMethod("parseFrom", byte[].class);
|
||||||
var deserialized = parseMethod.invoke(null, message.getPayload());
|
var deserialized = parseMethod.invoke(null,payload);
|
||||||
var constructors = Arrays.stream(outputClass.getConstructors())
|
var constructors = Arrays.stream(outputClass.getConstructors())
|
||||||
.filter(ea -> Arrays.stream(ea.getParameterTypes())
|
.filter(ea -> Arrays.stream(ea.getParameterTypes())
|
||||||
.toList()
|
.toList()
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ import io.github.jwdeveloper.tiktok.events.messages.poll.TikTokPollEndEvent;
|
|||||||
import io.github.jwdeveloper.tiktok.events.messages.poll.TikTokPollEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.poll.TikTokPollEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.poll.TikTokPollStartEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.poll.TikTokPollStartEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.poll.TikTokPollUpdateEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.poll.TikTokPollUpdateEvent;
|
||||||
|
import io.github.jwdeveloper.tiktok.events.messages.room.TikTokRoomEvent;
|
||||||
|
import io.github.jwdeveloper.tiktok.events.messages.room.TikTokRoomPinEvent;
|
||||||
|
import io.github.jwdeveloper.tiktok.events.messages.room.TikTokRoomUserInfoEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokFollowEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokFollowEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokJoinEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokJoinEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokLikeEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokLikeEvent;
|
||||||
@@ -111,8 +114,8 @@ public class TikTokMessageHandlerRegistration extends TikTokMessageHandler {
|
|||||||
|
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
private TikTokEvent handleWebcastControlMessage(WebcastResponse.Message msg) {
|
private TikTokEvent handleWebcastControlMessage(byte[] msg) {
|
||||||
var message = WebcastControlMessage.parseFrom(msg.getPayload());
|
var message = WebcastControlMessage.parseFrom(msg);
|
||||||
return switch (message.getAction()) {
|
return switch (message.getAction()) {
|
||||||
case STREAM_PAUSED -> new TikTokLivePausedEvent();
|
case STREAM_PAUSED -> new TikTokLivePausedEvent();
|
||||||
case STREAM_ENDED -> new TikTokLiveEndedEvent();
|
case STREAM_ENDED -> new TikTokLiveEndedEvent();
|
||||||
@@ -121,8 +124,8 @@ public class TikTokMessageHandlerRegistration extends TikTokMessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
private TikTokEvent handleGift(WebcastResponse.Message msg) {
|
private TikTokEvent handleGift(byte[] msg) {
|
||||||
var giftMessage = WebcastGiftMessage.parseFrom(msg.getPayload());
|
var giftMessage = WebcastGiftMessage.parseFrom(msg);
|
||||||
|
|
||||||
|
|
||||||
var gift = giftManager.findById((int) giftMessage.getGiftId());
|
var gift = giftManager.findById((int) giftMessage.getGiftId());
|
||||||
@@ -145,8 +148,8 @@ public class TikTokMessageHandlerRegistration extends TikTokMessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
private TikTokEvent handleSocialMedia(WebcastResponse.Message msg) {
|
private TikTokEvent handleSocialMedia(byte[] msg) {
|
||||||
var message = WebcastSocialMessage.parseFrom(msg.getPayload());
|
var message = WebcastSocialMessage.parseFrom(msg);
|
||||||
|
|
||||||
var socialType = Text.map(message.getCommon().getDisplayText()).getKey();
|
var socialType = Text.map(message.getCommon().getDisplayText()).getKey();
|
||||||
var matcher = socialMediaPattern.matcher(socialType);
|
var matcher = socialMediaPattern.matcher(socialType);
|
||||||
@@ -167,8 +170,8 @@ public class TikTokMessageHandlerRegistration extends TikTokMessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
private TikTokEvent handleMemberMessage(WebcastResponse.Message msg) {
|
private TikTokEvent handleMemberMessage(byte[] msg) {
|
||||||
var message = WebcastMemberMessage.parseFrom(msg.getPayload());
|
var message = WebcastMemberMessage.parseFrom(msg);
|
||||||
return switch (message.getAction()) {
|
return switch (message.getAction()) {
|
||||||
case JOINED -> new TikTokJoinEvent(message);
|
case JOINED -> new TikTokJoinEvent(message);
|
||||||
case SUBSCRIBED -> new TikTokSubscribeEvent(message);
|
case SUBSCRIBED -> new TikTokSubscribeEvent(message);
|
||||||
@@ -176,21 +179,21 @@ public class TikTokMessageHandlerRegistration extends TikTokMessageHandler {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private TikTokEvent handleRoomUserSeqMessage(WebcastResponse.Message msg) {
|
private TikTokEvent handleRoomUserSeqMessage(byte[] msg) {
|
||||||
var event = (TikTokRoomUserInfoEvent) mapMessageToEvent(WebcastRoomUserSeqMessage.class, TikTokRoomUserInfoEvent.class, msg);
|
var event = (TikTokRoomUserInfoEvent) mapMessageToEvent(WebcastRoomUserSeqMessage.class, TikTokRoomUserInfoEvent.class, msg);
|
||||||
roomInfo.setViewersCount(event.getTotalUsers());
|
roomInfo.setViewersCount(event.getTotalUsers());
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
private TikTokEvent handleLike(WebcastResponse.Message msg) {
|
private TikTokEvent handleLike(byte[] msg) {
|
||||||
var event = (TikTokLikeEvent) mapMessageToEvent(WebcastLikeMessage.class, TikTokLikeEvent.class, msg);
|
var event = (TikTokLikeEvent) mapMessageToEvent(WebcastLikeMessage.class, TikTokLikeEvent.class, msg);
|
||||||
roomInfo.setLikesCount(event.getTotalLikes());
|
roomInfo.setLikesCount(event.getTotalLikes());
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
private TikTokEvent handlePinMessage(WebcastResponse.Message msg) {
|
private TikTokEvent handlePinMessage(byte[] msg) {
|
||||||
var pinMessage = WebcastRoomPinMessage.parseFrom(msg.getPayload());
|
var pinMessage = WebcastRoomPinMessage.parseFrom(msg);
|
||||||
var chatMessage = WebcastChatMessage.parseFrom(pinMessage.getPinnedMessage());
|
var chatMessage = WebcastChatMessage.parseFrom(pinMessage.getPinnedMessage());
|
||||||
var chatEvent = new TikTokCommentEvent(chatMessage);
|
var chatEvent = new TikTokCommentEvent(chatMessage);
|
||||||
return new TikTokRoomPinEvent(pinMessage, chatEvent);
|
return new TikTokRoomPinEvent(pinMessage, chatEvent);
|
||||||
@@ -198,8 +201,8 @@ public class TikTokMessageHandlerRegistration extends TikTokMessageHandler {
|
|||||||
|
|
||||||
//TODO check
|
//TODO check
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
private TikTokEvent handlePollEvent(WebcastResponse.Message msg) {
|
private TikTokEvent handlePollEvent(byte[] msg) {
|
||||||
var poolMessage = WebcastPollMessage.parseFrom(msg.getPayload());
|
var poolMessage = WebcastPollMessage.parseFrom(msg);
|
||||||
return switch (poolMessage.getMessageType()) {
|
return switch (poolMessage.getMessageType()) {
|
||||||
case 0 -> new TikTokPollStartEvent(poolMessage);
|
case 0 -> new TikTokPollStartEvent(poolMessage);
|
||||||
case 1 -> new TikTokPollEndEvent(poolMessage);
|
case 1 -> new TikTokPollEndEvent(poolMessage);
|
||||||
|
|||||||
@@ -88,11 +88,16 @@ public class TikTokWebSocketListener extends WebSocketClient {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClose(int i, String s, boolean b) {
|
public void onClose(int i, String s, boolean b) {
|
||||||
|
|
||||||
|
System.out.println("CLOSE "+i+" "+s+" "+b);
|
||||||
tikTokEventHandler.publish(tikTokLiveClient,new TikTokDisconnectedEvent());
|
tikTokEventHandler.publish(tikTokLiveClient,new TikTokDisconnectedEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception error) {
|
public void onError(Exception error)
|
||||||
|
{
|
||||||
|
System.out.println("ERROR");
|
||||||
|
error.printStackTrace();
|
||||||
tikTokEventHandler.publish(tikTokLiveClient,new TikTokErrorEvent(error));
|
tikTokEventHandler.publish(tikTokLiveClient,new TikTokErrorEvent(error));
|
||||||
if(isNotClosing())
|
if(isNotClosing())
|
||||||
{
|
{
|
||||||
@@ -106,6 +111,7 @@ public class TikTokWebSocketListener extends WebSocketClient {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var websocketMessage = websocketMessageOptional.get();
|
var websocketMessage = websocketMessageOptional.get();
|
||||||
|
System.out.println("ACK ID "+websocketMessage.getLogId()+" ID "+websocketMessage.getSeqId());
|
||||||
sendAckId(websocketMessage.getLogId());
|
sendAckId(websocketMessage.getLogId());
|
||||||
|
|
||||||
var webResponse = getWebResponseMessage(websocketMessage.getPayload());
|
var webResponse = getWebResponseMessage(websocketMessage.getPayload());
|
||||||
@@ -147,7 +153,8 @@ public class TikTokWebSocketListener extends WebSocketClient {
|
|||||||
.build();
|
.build();
|
||||||
if(isNotClosing())
|
if(isNotClosing())
|
||||||
{
|
{
|
||||||
send(serverInfo.toByteString().toByteArray());
|
System.out.println("SEND ICK ID "+id);
|
||||||
|
send(serverInfo.toByteArray());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ public class TikTokWebSocketPingingTask
|
|||||||
|
|
||||||
public void run(WebSocket webSocket)
|
public void run(WebSocket webSocket)
|
||||||
{
|
{
|
||||||
|
stop();
|
||||||
var thread = new Thread(() ->
|
var thread = new Thread(() ->
|
||||||
{
|
{
|
||||||
pingTask(webSocket);
|
pingTask(webSocket);
|
||||||
@@ -66,7 +67,9 @@ public class TikTokWebSocketPingingTask
|
|||||||
Thread.sleep(100);
|
Thread.sleep(100);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
System.out.println("PING!");
|
||||||
webSocket.sendPing();
|
webSocket.sendPing();
|
||||||
|
|
||||||
var timeout = random.nextInt(MAX_TIMEOUT)+MIN_TIMEOUT;
|
var timeout = random.nextInt(MAX_TIMEOUT)+MIN_TIMEOUT;
|
||||||
Thread.sleep(timeout);
|
Thread.sleep(timeout);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import io.github.jwdeveloper.tiktok.events.messages.*;
|
|||||||
import io.github.jwdeveloper.tiktok.events.messages.TikTokConnectedEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.TikTokConnectedEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.TikTokDisconnectedEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.TikTokDisconnectedEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.gift.TikTokGiftEvent;
|
||||||
|
import io.github.jwdeveloper.tiktok.events.messages.room.TikTokRoomUserInfoEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokFollowEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokFollowEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokJoinEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokJoinEvent;
|
||||||
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokLikeEvent;
|
import io.github.jwdeveloper.tiktok.events.messages.social.TikTokLikeEvent;
|
||||||
@@ -38,7 +39,7 @@ import java.time.Duration;
|
|||||||
|
|
||||||
public class Main {
|
public class Main {
|
||||||
|
|
||||||
public static String TEST_TIKTOK_USER = "szwagierkaqueen";
|
public static String TEST_TIKTOK_USER = "ano_liwia";
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException
|
public static void main(String[] args) throws IOException
|
||||||
{
|
{
|
||||||
@@ -57,7 +58,7 @@ public class Main {
|
|||||||
})
|
})
|
||||||
.onConnected(Main::onConnected)
|
.onConnected(Main::onConnected)
|
||||||
.onDisconnected(Main::onDisconnected)
|
.onDisconnected(Main::onDisconnected)
|
||||||
.onRoomUserInfo(Main::onViewerData)
|
.onRoomUserInfo(Main::onRoomUserInfo)
|
||||||
.onJoin(Main::onJoin)
|
.onJoin(Main::onJoin)
|
||||||
.onComment(Main::onComment)
|
.onComment(Main::onComment)
|
||||||
.onFollow(Main::onFollow)
|
.onFollow(Main::onFollow)
|
||||||
@@ -81,7 +82,7 @@ public class Main {
|
|||||||
private static void onGift(LiveClient tikTokLive, TikTokGiftEvent e)
|
private static void onGift(LiveClient tikTokLive, TikTokGiftEvent e)
|
||||||
{
|
{
|
||||||
switch (e.getGift()) {
|
switch (e.getGift()) {
|
||||||
case ROSE -> print( "\uD83D\uDC95",ConsoleColors.YELLOW,"x", e.getCombo(), " roses!", "\uD83D\uDC95");
|
case ROSE -> print( ConsoleColors.YELLOW,"x", e.getCombo(), " roses!", "\uD83D\uDC95");
|
||||||
default -> print(ConsoleColors.YELLOW,"Thanks for gift: ", e.getGift().getName(),"X",e.getCombo());
|
default -> print(ConsoleColors.YELLOW,"Thanks for gift: ", e.getGift().getName(),"X",e.getCombo());
|
||||||
}
|
}
|
||||||
if(e.getGift().hasDiamondCostRange(1000,10000))
|
if(e.getGift().hasDiamondCostRange(1000,10000))
|
||||||
@@ -93,7 +94,7 @@ public class Main {
|
|||||||
private static void onDisconnected(LiveClient tikTokLive, TikTokDisconnectedEvent e) {
|
private static void onDisconnected(LiveClient tikTokLive, TikTokDisconnectedEvent e) {
|
||||||
print(ConsoleColors.GREEN, "[Disconnected]");
|
print(ConsoleColors.GREEN, "[Disconnected]");
|
||||||
}
|
}
|
||||||
private static void onViewerData(LiveClient tikTokLive, TikTokRoomUserInfoEvent e) {
|
private static void onRoomUserInfo(LiveClient tikTokLive, TikTokRoomUserInfoEvent e) {
|
||||||
print("Viewer count is:", e.getTotalUsers());
|
print("Viewer count is:", e.getTotalUsers());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class RunCollector {
|
|||||||
// users.add("mia_tattoo");
|
// users.add("mia_tattoo");
|
||||||
// users.add("mr_wavecheck");
|
// users.add("mr_wavecheck");
|
||||||
users.add("bangbetmenygy");
|
users.add("bangbetmenygy");
|
||||||
users.add("szwagierkaqueen");
|
// users.add("szwagierkaqueen");
|
||||||
for (var user : users) {
|
for (var user : users) {
|
||||||
try {
|
try {
|
||||||
runTikTokLiveInstance(user, db);
|
runTikTokLiveInstance(user, db);
|
||||||
|
|||||||
@@ -22,16 +22,61 @@
|
|||||||
*/
|
*/
|
||||||
package io.github.jwdeveloper.tiktok.tools.tester;
|
package io.github.jwdeveloper.tiktok.tools.tester;
|
||||||
|
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import com.google.protobuf.InvalidProtocolBufferException;
|
||||||
|
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastLinkMicFanTicketMethod;
|
||||||
import io.github.jwdeveloper.tiktok.mockClient.TikTokClientMock;
|
import io.github.jwdeveloper.tiktok.mockClient.TikTokClientMock;
|
||||||
|
|
||||||
public class RunLogTester
|
import java.io.File;
|
||||||
{
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
public static void main(String[] args)
|
public class RunLogTester {
|
||||||
{
|
|
||||||
var mockClient = TikTokClientMock.create("123").buildAndRun();
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
|
||||||
|
|
||||||
|
var input ="CjwKHVdlYmNhc3RMaW5rTWljRmFuVGlja2V0TWV0aG9kEIWWp7ig2O6OZRiGlviyrNjpjmUgza2G4a8xMAESZwoNCIWIouKYhLqBYhCbARCbASpTaHR0cHM6Ly9wMTYtd2ViY2FzdC50aWt0b2tjZG4uY29tL2ltZy93ZWJjYXN0LXNnL3Rpa3Rva19saW5rbWljX2NvaW5AM3gucG5nfjB4MC5wbmc=";
|
||||||
|
var bytes = Base64.getDecoder().decode(input);
|
||||||
|
var a= WebcastLinkMicFanTicketMethod.parseFrom(bytes);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var messages = getMessages();
|
||||||
|
var client = TikTokClientMock.create().build();
|
||||||
|
for(var msg : messages.entrySet())
|
||||||
|
{
|
||||||
|
for(var content : msg.getValue())
|
||||||
|
{
|
||||||
|
client.publishMessage(msg.getKey(),content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
client.connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static Map<String, List<String>> getMessages() throws IOException {
|
||||||
|
var path = "C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\Tools-EventsCollector\\src\\main\\resources\\log.json";
|
||||||
|
var jsonElement = JsonParser.parseReader(new FileReader(path, Charset.defaultCharset()));
|
||||||
|
|
||||||
|
var res = new HashMap<String, List<String>>();
|
||||||
|
if (jsonElement.isJsonObject()) {
|
||||||
|
var jsonObject = jsonElement.getAsJsonObject();
|
||||||
|
var keys = jsonObject.keySet();
|
||||||
|
for (String key : keys) {
|
||||||
|
var messages = jsonObject.get(key).getAsJsonArray();
|
||||||
|
for (var msg : messages) {
|
||||||
|
var data = msg.getAsJsonObject().get("eventData").getAsString();
|
||||||
|
// System.out.println("KEY: " + key + " DATA: " + data);
|
||||||
|
res.computeIfAbsent(key, s -> new ArrayList<>()).add(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,13 @@ public class LiveClientMock extends TikTokLiveClient {
|
|||||||
this.websocketClientMock = webSocketClient;
|
this.websocketClientMock = webSocketClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void publishMessage(String type, String base64) {
|
||||||
|
websocketClientMock.addMessage(type, base64);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void publishMessage(Class<?> clazz, String base64) {
|
||||||
|
websocketClientMock.addMessage(clazz.getSimpleName(), base64);
|
||||||
|
}
|
||||||
|
|
||||||
public void publishResponse(String value) {
|
public void publishResponse(String value) {
|
||||||
websocketClientMock.addResponse(value);
|
websocketClientMock.addResponse(value);
|
||||||
|
|||||||
@@ -22,12 +22,13 @@
|
|||||||
*/
|
*/
|
||||||
package io.github.jwdeveloper.tiktok.mockClient.mocks;
|
package io.github.jwdeveloper.tiktok.mockClient.mocks;
|
||||||
|
|
||||||
import io.github.jwdeveloper.tiktok.TikTokLiveClientBuilder;
|
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
|
||||||
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveMessageException;
|
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveMessageException;
|
||||||
import io.github.jwdeveloper.tiktok.handlers.TikTokMessageHandler;
|
import io.github.jwdeveloper.tiktok.handlers.TikTokMessageHandler;
|
||||||
import io.github.jwdeveloper.tiktok.live.LiveClient;
|
import io.github.jwdeveloper.tiktok.live.LiveClient;
|
||||||
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse;
|
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse;
|
||||||
import io.github.jwdeveloper.tiktok.websocket.SocketClient;
|
import io.github.jwdeveloper.tiktok.websocket.SocketClient;
|
||||||
|
import lombok.Value;
|
||||||
|
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
@@ -37,16 +38,30 @@ import java.util.logging.Logger;
|
|||||||
public class WebsocketClientMock implements SocketClient {
|
public class WebsocketClientMock implements SocketClient {
|
||||||
Logger logger;
|
Logger logger;
|
||||||
Stack<WebcastResponse> responses;
|
Stack<WebcastResponse> responses;
|
||||||
|
|
||||||
|
Stack<MsgStruct> messages;
|
||||||
TikTokMessageHandler messageHandler;
|
TikTokMessageHandler messageHandler;
|
||||||
|
|
||||||
private boolean isRunning;
|
private boolean isRunning;
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public static class MsgStruct {
|
||||||
|
String messageType;
|
||||||
|
byte[] messageValue;
|
||||||
|
}
|
||||||
|
|
||||||
public WebsocketClientMock(Logger logger, Stack<WebcastResponse> responses, TikTokMessageHandler messageHandler) {
|
public WebsocketClientMock(Logger logger, Stack<WebcastResponse> responses, TikTokMessageHandler messageHandler) {
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
this.responses = responses;
|
this.responses = responses;
|
||||||
this.messageHandler = messageHandler;
|
this.messageHandler = messageHandler;
|
||||||
|
messages = new Stack<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public WebsocketClientMock addMessage(String type, String value) {
|
||||||
|
var bytes = Base64.getDecoder().decode(value);
|
||||||
|
messages.push(new MsgStruct(type, bytes));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public WebsocketClientMock addResponse(String value) {
|
public WebsocketClientMock addResponse(String value) {
|
||||||
var bytes = Base64.getDecoder().decode(value);
|
var bytes = Base64.getDecoder().decode(value);
|
||||||
@@ -71,13 +86,9 @@ public class WebsocketClientMock implements SocketClient {
|
|||||||
@Override
|
@Override
|
||||||
public void start(WebcastResponse webcastResponse, LiveClient tikTokLiveClient) {
|
public void start(WebcastResponse webcastResponse, LiveClient tikTokLiveClient) {
|
||||||
logger.info("Running message: " + responses.size());
|
logger.info("Running message: " + responses.size());
|
||||||
isRunning =true;
|
isRunning = true;
|
||||||
while (isRunning) {
|
while (!responses.isEmpty() || !messages.isEmpty()) {
|
||||||
do {
|
if (!responses.isEmpty()) {
|
||||||
if(responses.isEmpty())
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
var response = responses.pop();
|
var response = responses.pop();
|
||||||
for (var message : response.getMessagesList()) {
|
for (var message : response.getMessagesList()) {
|
||||||
try {
|
try {
|
||||||
@@ -88,11 +99,15 @@ public class WebsocketClientMock implements SocketClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (!responses.isEmpty());
|
if (!messages.isEmpty()) {
|
||||||
try {
|
var messageStr = messages.pop();
|
||||||
Thread.sleep(10);
|
try {
|
||||||
} catch (InterruptedException e) {
|
System.out.println("TYPE: " + messageStr.getMessageType());
|
||||||
throw new RuntimeException(e);
|
messageHandler.handleSingleMessage(tikTokLiveClient, messageStr.getMessageType(), messageStr.getMessageValue());
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.info("Unable to parse message for response " + messageStr.getMessageType());
|
||||||
|
throw new TikTokLiveException(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user