Update collaboration.md

This commit is contained in:
Jacek W
2023-12-05 02:55:32 +01:00
committed by GitHub
parent 33a3f7afb8
commit 31075e5f09

View File

@@ -19,77 +19,78 @@ Are you willing to help or improve TikTokLiveJava?
We can divide working of library to 4 important parts We can divide working of library to 4 important parts
- Getting info about live from TikTok - Getting info about live from TikTok. Library is making 3 https requests
Library is making 3 https
- first for getting live `Room_ID` - first for getting live `Room_ID`
- second for getting more specific live metadata such as live title, host name... - second for getting more specific live metadata such as live title, host name...
- third to `Sign API` that returns access token that is later use for connecting - third to `Sign API` that returns access token that is later use for connecting
to TikTok websocket to TikTok websocket
- Connecting to TikTok websocket (PushServer) - Connecting to TikTok websocket (PushServer)
After successful connection TikTok starts to send `ProtocolBuffer`
messages in binary format. This is very important to understand `ProtocolBuffer` After successful connection to TikTok, `pushServer` starts to send `ProtocolBuffer`
it is not complicated :). All the proto files are included under `API/src/main/proto` messages in binary format. This is very important to understand `ProtocolBuffer. Don't worry it is not complicated :).
After using `Maven compile` command on project, java classes are generated from All the proto files are included under `API/src/main/proto` After using `Maven compile` command on project, java classes are generated from
those files. so then we can easily map incoming bytes to class, for examples those files. so then we can easily map incoming bytes to classes, for examples
`WebcastGiftMessage message = WebcastGiftMessage.parseFrom(incomingBytesArray)` `WebcastGiftMessage message = WebcastGiftMessage.parseFrom(incomingBytesArray)`
- Mapping TikTok data to events - Mapping TikTok data to events
at this point we have TikTok data inside protocol-buffer classes now we want
to map it to TikTokLiveJava events. Why? because `protocol-buffer classes` might At this point we have TikTok data inside protocol-buffer classes now we want
be changed at any point, but we want to keep library code structure consistent to map it to events. Why? because `protocol-buffer classes` might be changed at any point,
but we want to keep library code structure consistent across versions.
so for example `WebcastGiftMessage` is mapped to `TikTokGiftEvent` so for example `WebcastGiftMessage` is mapped to `TikTokGiftEvent`
- trigger events - trigger events
when the events objects are done last step is to trigger then and that's it
When the events objects are done last step is to trigger them. And that's it!
`tikTokEventObserver.publish(liveClient, tiktokGiftEvent)` `tikTokEventObserver.publish(liveClient, tiktokGiftEvent)`
### Project structure ### Project structure
project is made from few modules the most important one are Project is made from few modules the most important one are
#### API #### API
Contains interfaces and data classes, all code that is ment Contains interfaces and data classes. All code included in this
to be visible and use for the Library user should be included project is ment to be visible to people that are using library.
in this project
- All the events can be found user `io.github.jwdeveloper.tiktok.data.events` - All the events can be found user `io.github.jwdeveloper.tiktok.data.events`
- All the class data that are used in events is under `io.github.jwdeveloper.tiktok.data.models` - All the class data that are used in events is under `io.github.jwdeveloper.tiktok.data.models`
- All the protocol-buffer classes will be generated at namespack `io.github.jwdeveloper.tiktok.messages` they are at location `API\target\classes\io\github\jwdeveloper\tiktok\messages`
#### Client #### Client
Contains implementation of `API` modules interfaces and all the code Contains implementation of `API` modules interfaces and all the code
important classes important classes
- `TikTokLiveClient` core class that is use to connect/disconnect from TikTok - `TikTokLiveClient` core class that is use to mangae connection disconnection
- `TikTokLiveClientBuilder` preparing `TikTokLiveClient` class - `TikTokLiveClientBuilder` preparing and creating `TikTokLiveClient` class
- `TikTokApiService` use for Http requests to TikTok/Sign API - `TikTokApiService` use for Http requests to TikTok/Sign API
- `TikTokWebSocketClient` receiving all ProtocolBuffer messages from TikTok - `TikTokWebSocketClient` receiving all ProtocolBuffer messages from TikTok
- `TikTokMessageHandler` **heart of library** it finds suitable mapping for incoming data and trigger its mapping handler as result list of events - `TikTokMessageHandler` **heart of library** it finds suitable mapper for incoming data and triggers its mapping handler as result list of events
is created and published. check out `TikTokMessageHandler.handleSingleMessage` is created and published. **check out** `TikTokMessageHandler.handleSingleMessage`
- `TikTokMessageHandlerRegistration` register all mappings TikTok data -> TikTokLiveJava events - `TikTokMessageHandlerRegistration` register all mappings `protol-buffer` classes -> `events`
- `TikTokEventObserver` used to register and trigger TikTok events - `TikTokEventObserver` used to register and trigger TikTok events
There are also few more modules made purely for testing and debbuging code
### There are also few more modules made purely for testing and debbuging code
#### Examples #### Examples
Project made to show up new features and present basic Project is made to show up new features and present basic
example for library. While developing new features you example of library. While developing you can use it this project as playground
can use it as playground
#### Tools #### Tools
Project that contains code generators for automation teadios boilder plate Project that contains code generators.
It contains very useful class `GenerateGiftsEnum` that download gifts json from TikTok The most useful one is class `GenerateGiftsEnum` that download gifts json from TikTok
and generates code for `Gift` enum that is later added to `API` module at path `io.github.jwdeveloper.tiktok.data.models.gifts.Gift` and generates code for `Gift` enum that is later added to `API` module at path `io.github.jwdeveloper.tiktok.data.models.gifts.Gift`
#### Tools-EventsCollector #### Tools-EventsCollector
Tool that can be used to store all events from live to sqlLite database or Json file Tool that can be used to store all `protocol-buffer` and `events` from live to `sqlLite` database or `Json` file
It is very handy for later debuging events data It is very handy for later debuging `protocol-buffer` and `events` data
#### Tools-EventsWebViewer #### Tools-EventsWebViewer
Tools that runs website that collects and display pure data from TikTok incoming events Tools that runs website that collects and display pure data from TikTok
very useful for debuging very useful for debuging
#### Tools-ReadmeGenerator #### Tools-ReadmeGenerator