diff --git a/.gitignore b/.gitignore
index d83c8b3..5fe359d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,10 @@
backend-infrastructure/.aws-sam
# Created by https://www.gitignore.io/api/osx,linux,python,windows,pycharm,visualstudiocode
-
+*.db
### Linux ###
*~
-
+.db
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
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 cbc81ca..385fb55 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
@@ -26,6 +26,7 @@ import io.github.jwdeveloper.tiktok.annotations.EventMeta;
import io.github.jwdeveloper.tiktok.annotations.EventType;
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.users.User;
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastGiftMessage;
import lombok.Getter;
@@ -40,7 +41,7 @@ import lombok.Getter;
*
Combo: 4 -> comboState = GiftSendType.Active
* Combo: 8 -> comboState = GiftSendType.Active
* Combo: 12 -> comboState = GiftSendType.Finsihed
- *
+ *
* Remember if comboState is Finsihed both TikTokGiftComboEvent and TikTokGiftEvent event gets triggered
*/
@EventMeta(eventType = EventType.Message)
@@ -48,8 +49,8 @@ import lombok.Getter;
public class TikTokGiftComboEvent extends TikTokGiftEvent {
private final GiftSendType comboState;
- public TikTokGiftComboEvent(Gift gift, WebcastGiftMessage msg, GiftSendType comboState) {
- super(gift, msg);
+ public TikTokGiftComboEvent(Gift gift, User host, WebcastGiftMessage msg, GiftSendType comboState) {
+ super(gift, host, msg);
this.comboState = comboState;
}
}
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 b8db670..0fff54c 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
@@ -49,11 +49,15 @@ public class TikTokGiftEvent extends TikTokHeaderEvent {
private final User toUser;
private final int combo;
- public TikTokGiftEvent(Gift gift, WebcastGiftMessage msg) {
+ public TikTokGiftEvent(Gift gift, User liveHost, WebcastGiftMessage msg) {
super(msg.getCommon());
this.gift = gift;
user = User.map(msg.getUser(), msg.getUserIdentity());
- toUser = new User(msg.getUserGiftReciever().getUserId(), "", "", new Picture(""), 0, 0, new ArrayList<>());
+ if (msg.getToUser().getNickname().isEmpty()) {
+ toUser = liveHost;
+ } else {
+ toUser = User.map(msg.getToUser());
+ }
combo = msg.getComboCount();
}
}
\ No newline at end of file
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/http/TikTokHttpResponseEvent.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/http/TikTokHttpResponseEvent.java
index 926abeb..0a3cc5e 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/http/TikTokHttpResponseEvent.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/events/http/TikTokHttpResponseEvent.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.data.events.http;
import io.github.jwdeveloper.tiktok.annotations.EventMeta;
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/http/HttpData.java b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/http/HttpData.java
index 235138f..2f1bd3d 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/http/HttpData.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/data/models/http/HttpData.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.data.models.http;
import lombok.Data;
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 ed376ab..7aa4634 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
@@ -57,7 +57,7 @@ public interface LiveClient {
/**
- * You to manually trigger event
+ * Use to manually invoke event
*/
void publishEvent(TikTokEvent event);
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapper.java b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapper.java
index 6cf7e98..d2597cb 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapper.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapper.java
@@ -47,6 +47,9 @@ public interface TikTokMapper {
TikTokMapperModel forMessage(Class extends GeneratedMessageV3> mapperName, Function onMapping);
+ TikTokMapperModel forAnyMessage();
+
+
boolean isRegistered(String mapperName);
boolean isRegistered(Class mapperName);
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapperHelper.java b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapperHelper.java
index b493676..7ae5d9d 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapperHelper.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapperHelper.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.mappers;
import com.google.protobuf.GeneratedMessageV3;
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapperModel.java b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapperModel.java
index f198832..921d7ad 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapperModel.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokMapperModel.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.mappers;
import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/AfterMappingAction.java b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/AfterMappingAction.java
index fe13206..6977e11 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/AfterMappingAction.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/AfterMappingAction.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.mappers.data;
import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/MappingAction.java b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/MappingAction.java
index 3ed0b99..aefe059 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/MappingAction.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/MappingAction.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.mappers.data;
import io.github.jwdeveloper.tiktok.mappers.TikTokMapperHelper;
diff --git a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/MappingResult.java b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/MappingResult.java
index f904dcc..81ac6e1 100644
--- a/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/MappingResult.java
+++ b/API/src/main/java/io/github/jwdeveloper/tiktok/mappers/data/MappingResult.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.mappers.data;
import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
diff --git a/API/src/main/proto/webcast.proto b/API/src/main/proto/webcast.proto
index e05ba29..afc3791 100644
--- a/API/src/main/proto/webcast.proto
+++ b/API/src/main/proto/webcast.proto
@@ -18,7 +18,7 @@ message WebcastPushFrame {
uint64 LogId = 2;
uint64 Service = 3;
uint64 Method = 4;
- map headers = 5;
+ map headers = 5;
string PayloadEncoding = 6;
string PayloadType = 7;
bytes Payload = 8;
@@ -68,6 +68,7 @@ message WebcastGiftMessage {
int32 repeatCount = 5;
int32 comboCount = 6;
User user = 7;
+ User toUser = 8;
int32 repeatEnd = 9;
int64 groupId = 11;
int64 incomeTaskgifts = 12;
@@ -84,8 +85,8 @@ message WebcastGiftMessage {
message UserGiftReciever
{
- int64 userId =1;
- string deviceName = 10;
+ int64 userId = 1;
+ string deviceName = 10;
}
message GiftIMPriority {
@@ -203,7 +204,7 @@ message WebcastChatMessage {
int32 quickChatScene = 16;
int32 communityFlaggedStatus = 17;
UserIdentity UserIdentity = 18;
- map CommentQualityScores = 19;
+ map CommentQualityScores = 19;
// @EmoteWithIndex
// proto.webcast.im.ChatMessage
@@ -283,14 +284,14 @@ message WebcastGoalUpdateMessage {
int64 contributorId = 4;
Image contributorAvatar = 5;
string contributorDisplayId = 6;
-// SubGoal contributeSubgoal = 7;
+ // SubGoal contributeSubgoal = 7;
int64 contributeCount = 9;
int64 contributeScore = 10;
int64 giftRepeatCount = 11;
string contributorIdStr = 12;
bool pin = 13;
bool unpin = 14;
- // GoalPinInfo pinInfo = 15;
+ // GoalPinInfo pinInfo = 15;
}
// Message related to Chat-moderation?
@@ -354,7 +355,7 @@ message WebcastSocialMessage {
message WebcastSubNotifyMessage {
Common common = 1;
User user = 2;
-// ExhibitionType exhibitionType = 3; // Enum
+ // ExhibitionType exhibitionType = 3; // Enum
int64 subMonth = 4;
SubscribeType subscribeType = 5; // Enum
OldSubscribeStatus oldSubscribeStatus = 6; // Enum
@@ -681,7 +682,7 @@ message WebcastMsgDetectMessage {
bool detectP2PMsg = 3;
bool detectRoomMsg = 4;
bool httpOptimize = 5;
-}
+ }
}
//@WebcastOecLiveShoppingMessage
@@ -751,11 +752,11 @@ message WebcastLinkMessage {
LinkerUpdateUserSettingContent UpdateUserSettingContent = 18;
LinkerMicIdxUpdateContent MicIdxUpdateContent = 19;
LinkerListChangeContent ListChangeContent = 20;
- // CohostListChangeContent CohostListChangeContent = 21;
+ // CohostListChangeContent CohostListChangeContent = 21;
LinkerMediaChangeContent MediaChangeContent = 22;
LinkerAcceptNoticeContent ReplyAcceptNoticeContent = 23;
LinkerSysKickOutContent SysKickOutContent = 101;
- // LinkmicUserToastContent UserToastContent = 102;
+ // LinkmicUserToastContent UserToastContent = 102;
string Extra = 200;
int64 ExpireTimestamp = 201;
string TransferExtra = 202;
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 0fc314f..17c7191 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClientBuilder.java
@@ -192,7 +192,7 @@ public class TikTokLiveClientBuilder implements LiveClientBuilder {
//ConnectionEvents events
var commonHandler = new TikTokCommonEventHandler();
- var giftHandler = new TikTokGiftEventHandler(giftManager);
+ var giftHandler = new TikTokGiftEventHandler(giftManager, roomInfo);
var roomInfoHandler = new TikTokRoomInfoEventHandler(roomInfo);
var socialHandler = new TikTokSocialMediaEventHandler(roomInfo);
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokHttpRequestFactory.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokHttpRequestFactory.java
index eae77b9..79a10ef 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokHttpRequestFactory.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/http/TikTokHttpRequestFactory.java
@@ -141,7 +141,7 @@ public class TikTokHttpRequestFactory implements TikTokHttpRequest {
private String getContent(HttpRequest request) throws Exception {
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
- var event = new TikTokHttpResponseEvent(response.uri().toString(), HttpData.map(request), HttpData.map(response));
+ var event = new TikTokHttpResponseEvent(response.uri().toString(), HttpData.map(response), HttpData.map(request));
eventHandler.publish(null, event);
if (response.statusCode() == 404) {
throw new TikTokLiveRequestException("Request responded with 404 NOT_FOUND");
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapper.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapper.java
index d4ca55a..99e79f5 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapper.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapper.java
@@ -23,6 +23,7 @@
package io.github.jwdeveloper.tiktok.mappers;
import com.google.protobuf.GeneratedMessageV3;
+import io.github.jwdeveloper.tiktok.TikTokLive;
import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
import io.github.jwdeveloper.tiktok.mappers.data.MappingAction;
import io.github.jwdeveloper.tiktok.mappers.data.MappingResult;
@@ -36,10 +37,12 @@ public class TikTokLiveMapper implements TikTokMapper {
private final Map mappers;
private final TikTokMapperHelper mapperUtils;
+ private final TikTokLiveMapperModel globalMapperModel;
public TikTokLiveMapper(TikTokMapperHelper mapperUtils) {
this.mappers = new HashMap<>();
this.mapperUtils = mapperUtils;
+ this.globalMapperModel = new TikTokLiveMapperModel("any message");
}
@Override
@@ -76,6 +79,11 @@ public class TikTokLiveMapper implements TikTokMapper {
return forMessage(mapperName, (inputBytes, messageName, mapperHelper) -> MappingResult.of(inputBytes, onMapping.apply(inputBytes)));
}
+ @Override
+ public TikTokMapperModel forAnyMessage() {
+ return globalMapperModel;
+ }
+
public boolean isRegistered(String mapperName) {
return mappers.containsKey(mapperName);
@@ -84,6 +92,7 @@ public class TikTokLiveMapper implements TikTokMapper {
public boolean isRegistered(Class mapperName) {
return mappers.containsKey(mapperName.getSimpleName());
}
+
public List handleMapping(String messageName, byte[] bytes) {
if (!isRegistered(messageName)) {
return List.of();
@@ -91,10 +100,17 @@ public class TikTokLiveMapper implements TikTokMapper {
var mapperModel = mappers.get(messageName);
var inputBytes = mapperModel.getOnBeforeMapping().onMapping(bytes, messageName, mapperUtils);
+ var globalInputBytes = globalMapperModel.getOnBeforeMapping().onMapping(inputBytes, messageName, mapperUtils);
- var mappingResult = mapperModel.getOnMapping().onMapping(inputBytes, messageName, mapperUtils);
+
+ var mappingResult = mapperModel.getOnMapping().onMapping(globalInputBytes, messageName, mapperUtils);
+
+ if (mappingResult == null) {
+ mappingResult = globalMapperModel.getOnMapping().onMapping(globalInputBytes, messageName, mapperUtils);
+ }
var afterMappingResult = mapperModel.getOnAfterMapping().apply(mappingResult);
- return afterMappingResult;
+ var globalAfterMappingResult = globalMapperModel.getOnAfterMapping().apply(MappingResult.of(mappingResult.getSource(), afterMappingResult));
+ return globalAfterMappingResult;
}
}
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperHelper.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperHelper.java
index bb3cd2d..9c854f9 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperHelper.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperHelper.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.mappers;
import com.google.protobuf.GeneratedMessageV3;
diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperModel.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperModel.java
index c4f3b69..93f9f52 100644
--- a/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperModel.java
+++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/mappers/TikTokLiveMapperModel.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.mappers;
import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
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 9667abd..b9b5a1e 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
@@ -22,6 +22,7 @@
*/
package io.github.jwdeveloper.tiktok.mappers.handlers;
+import io.github.jwdeveloper.tiktok.TikTokRoomInfo;
import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftComboEvent;
import io.github.jwdeveloper.tiktok.data.events.gift.TikTokGiftEvent;
@@ -43,17 +44,19 @@ import java.util.Map;
public class TikTokGiftEventHandler {
private final GiftManager giftManager;
private final Map giftsMessages;
+ private final TikTokRoomInfo tikTokRoomInfo;
- public TikTokGiftEventHandler(GiftManager giftManager) {
+ public TikTokGiftEventHandler(GiftManager giftManager, TikTokRoomInfo tikTokRoomInfo) {
this.giftManager = giftManager;
giftsMessages = new HashMap<>();
+ this.tikTokRoomInfo = tikTokRoomInfo;
}
@SneakyThrows
public MappingResult handleGifts(byte[] msg, String name, TikTokMapperHelper helper) {
var currentMessage = WebcastGiftMessage.parseFrom(msg);
var gifts = handleGift(currentMessage);
- return MappingResult.of(currentMessage,gifts);
+ return MappingResult.of(currentMessage, gifts);
}
public List handleGift(WebcastGiftMessage currentMessage) {
@@ -101,12 +104,12 @@ public class TikTokGiftEventHandler {
private TikTokGiftEvent getGiftEvent(WebcastGiftMessage message) {
var gift = getGiftObject(message);
- return new TikTokGiftEvent(gift, message);
+ return new TikTokGiftEvent(gift, tikTokRoomInfo.getHost(), message);
}
private TikTokGiftEvent getGiftComboEvent(WebcastGiftMessage message, GiftSendType state) {
var gift = getGiftObject(message);
- return new TikTokGiftComboEvent(gift, message, state);
+ return new TikTokGiftComboEvent(gift, tikTokRoomInfo.getHost(), message, state);
}
private Gift getGiftObject(WebcastGiftMessage giftMessage) {
diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/CustomEventExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CustomEventExample.java
new file mode 100644
index 0000000..6dd12e1
--- /dev/null
+++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/CustomEventExample.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package io.github.jwdeveloper.tiktok;
+
+import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
+import io.github.jwdeveloper.tiktok.data.models.Picture;
+import io.github.jwdeveloper.tiktok.data.models.gifts.Gift;
+import io.github.jwdeveloper.tiktok.live.GiftManager;
+import io.github.jwdeveloper.tiktok.live.LiveClient;
+import lombok.AllArgsConstructor;
+
+public class CustomEventExample {
+ @AllArgsConstructor
+ public static class CheapGiftEvent extends TikTokEvent {
+ Gift gift;
+ }
+
+ @AllArgsConstructor
+ public static class ExpensiveGiftEvent extends TikTokEvent {
+ Gift gift;
+ }
+
+ public static void main(String[] args) {
+ TikTokLive.newClient(SimpleExample.TIKTOK_HOSTNAME)
+ .onGift((liveClient, event) ->
+ {
+ if (event.getGift().getDiamondCost() > 100)
+ liveClient.publishEvent(new ExpensiveGiftEvent(event.getGift()));
+ else
+ liveClient.publishEvent(new CheapGiftEvent(event.getGift()));
+ })
+ .onEvent(CheapGiftEvent.class,(liveClient, event) ->
+ {
+ System.out.println("Thanks for cheap gift");
+ })
+ .onEvent(ExpensiveGiftEvent.class,(liveClient, event) ->
+ {
+ System.out.println("Thanks for expensive gift!");
+ })
+ .build();
+ }
+}
diff --git a/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/Settings.java b/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/Settings.java
index 8cd3f51..136126c 100644
--- a/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/Settings.java
+++ b/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/Settings.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.webviewer;
diff --git a/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/services/TikTokCollectorService.java b/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/services/TikTokCollectorService.java
index 483c17b..8279385 100644
--- a/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/services/TikTokCollectorService.java
+++ b/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/services/TikTokCollectorService.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.webviewer.services;
import io.github.jwdeveloper.tiktok.tools.TikTokLiveTools;
diff --git a/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/services/TikTokDatabaseService.java b/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/services/TikTokDatabaseService.java
index 6aaa1b9..357eb39 100644
--- a/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/services/TikTokDatabaseService.java
+++ b/Tools-EventsWebViewer/src/main/java/io/github/jwdeveloper/tiktok/webviewer/services/TikTokDatabaseService.java
@@ -1,3 +1,25 @@
+/*
+ * Copyright (c) 2023-2023 jwdeveloper jacekwoln@gmail.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
package io.github.jwdeveloper.tiktok.webviewer.services;
import io.github.jwdeveloper.tiktok.messages.webcast.WebcastResponse;
diff --git a/Tools-EventsWebViewer/src/main/resources/public/index.js b/Tools-EventsWebViewer/src/main/resources/public/index.js
index 184f7a6..905c332 100644
--- a/Tools-EventsWebViewer/src/main/resources/public/index.js
+++ b/Tools-EventsWebViewer/src/main/resources/public/index.js
@@ -25,7 +25,6 @@ var data =
}
-
dropDown("usersDropDown", () => `${baseUrl}/tiktok/users`, async (e) => {
data.user = e;
update();
@@ -51,28 +50,15 @@ function update() {
}
async function updateAsync() {
- console.log(data);
+ console.log("Updating", data);
await updateConnectionButton()
await updateDataNamesList(async (dataName) => {
data.dataName = dataName;
data.page = 0;
- await updateContent();
+ await updateContent(`${baseUrl}/tiktok/data?name=${data.dataName}&type=${data.dataType}&page=${data.page}`);
await updatePagination(async (page, link) => {
data.page = page;
- let response = await fetch(link);
- let json = await response.text();
- console.log(link)
- let root = JSON.parse(json);
- editor.setValue(root.content);
-
- if(data.dataType === 'message')
- {
- console.log("sending proto version")
- let response2 = await fetch(`${link}&asProto=true`);
- let json2 = await response2.text();
- let root2 = JSON.parse(json2);
- editor2.setValue(root2.content);
- }
+ await updateContent(link)
});
});
await fetch(`${baseUrl}/tiktok/update?user=${data.user}&session=${data.sessionTag}`);
@@ -100,21 +86,30 @@ async function updatePagination(onSelect) {
});
}
-async function updateContent() {
+async function updateContent(link) {
console.log("updating content", data)
- let response = await fetch(`${baseUrl}/tiktok/data?name=${data.dataName}&type=${data.dataType}&page=${data.page}`);
+ let response = await fetch(link);
let json = await response.text();
+ console.log(link)
let root = JSON.parse(json);
editor.setValue(root.content);
-
-
- if(data.dataType === 'message')
- {
+ $("#editor2").hide()
+ if (data.dataType === 'message') {
console.log("sending proto version")
- let response2 = await fetch(`${baseUrl}/tiktok/data?name=${data.dataName}&type=${data.dataType}&page=${data.page}&asProto=true`);
+ let response2 = await fetch(`${link}&asProto=true`);
let json2 = await response2.text();
let root2 = JSON.parse(json2);
editor2.setValue(root2.content);
+ $("#editor2").show()
+ }
+
+ if (data.dataType === 'response' && data.dataName === 'Http') {
+
+ var content = JSON.parse(root.content);
+ var body = JSON.parse(content.request.body)
+ var asJson = JSON.stringify(body, null, 2)
+ editor2.setValue(asJson);
+ $("#editor2").show()
}
}
@@ -194,9 +189,9 @@ async function updateConnectionButton() {
async function connect() {
let name = document.getElementById('name').value;
- let session = document.getElementById('sessionTag').value;
+ let session = document.getElementById('sessionTag').value;
data.collector.name = name
- data.collector.sessionTag =session
+ data.collector.sessionTag = session
let response = await fetch(`${baseUrl}/tiktok/connect?name=${data.collector.name}&session=${data.collector.sessionTag}`);
let greeting = await response.text();
diff --git a/link.db b/link.db
deleted file mode 100644
index 0334105..0000000
Binary files a/link.db and /dev/null differ
diff --git a/log.db b/log.db
deleted file mode 100644
index c5b92c3..0000000
Binary files a/log.db and /dev/null differ