Skip to content

Commit

Permalink
chore(LiquidChat): code cleanup (CCBlueX#5193)
Browse files Browse the repository at this point in the history
* chore(LiquidChat): code cleanup

1. GSON creations
2. deprecated SSLContext creation
3. packet registration

* hashmap
  • Loading branch information
MukjepScarlet authored Jan 6, 2025
1 parent c832dde commit a97fd4f
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,40 +37,40 @@ import io.netty.handler.codec.http.HttpObjectAggregator
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame
import io.netty.handler.codec.http.websocketx.WebSocketClientHandshakerFactory
import io.netty.handler.codec.http.websocketx.WebSocketVersion
import io.netty.handler.ssl.SslContext
import io.netty.handler.ssl.SslContextBuilder
import io.netty.handler.ssl.util.InsecureTrustManagerFactory
import net.ccbluex.liquidbounce.api.core.withScope
import net.ccbluex.liquidbounce.authlib.yggdrasil.GameProfileRepository
import net.ccbluex.liquidbounce.event.EventManager
import net.ccbluex.liquidbounce.event.events.*
import net.ccbluex.liquidbounce.features.chat.packet.*
import net.ccbluex.liquidbounce.utils.client.chat
import net.ccbluex.liquidbounce.utils.client.mc
import net.minecraft.util.Util
import java.net.URI
import java.util.*

class ChatClient {

var channel: Channel? = null
private var channel: Channel? = null

private val serializer = PacketSerializer().apply {
registerPacket("RequestMojangInfo", ServerRequestMojangInfoPacket::class.java)
registerPacket("LoginMojang", ServerLoginMojangPacket::class.java)
registerPacket("Message", ServerMessagePacket::class.java)
registerPacket("PrivateMessage", ServerPrivateMessagePacket::class.java)
registerPacket("BanUser", ServerBanUserPacket::class.java)
registerPacket("UnbanUser", ServerUnbanUserPacket::class.java)
registerPacket("RequestJWT", ServerRequestJWTPacket::class.java)
registerPacket("LoginJWT", ServerLoginJWTPacket::class.java)
register<ServerRequestMojangInfoPacket>("RequestMojangInfo")
register<ServerLoginMojangPacket>("LoginMojang")
register<ServerMessagePacket>("Message")
register<ServerPrivateMessagePacket>("PrivateMessage")
register<ServerBanUserPacket>("BanUser")
register<ServerUnbanUserPacket>("UnbanUser")
register<ServerRequestJWTPacket>("RequestJWT")
register<ServerLoginJWTPacket>("LoginJWT")
}

private val deserializer = PacketDeserializer().apply {
registerPacket("MojangInfo", ClientMojangInfoPacket::class.java)
registerPacket("NewJWT", ClientNewJWTPacket::class.java)
registerPacket("Message", ClientMessagePacket::class.java)
registerPacket("PrivateMessage", ClientPrivateMessagePacket::class.java)
registerPacket("Error", ClientErrorPacket::class.java)
registerPacket("Success", ClientSuccessPacket::class.java)
register<ClientMojangInfoPacket>("MojangInfo")
register<ClientNewJWTPacket>("NewJWT")
register<ClientMessagePacket>("Message")
register<ClientPrivateMessagePacket>("PrivateMessage")
register<ClientErrorPacket>("Error")
register<ClientSuccessPacket>("Success")
}

val connected: Boolean
Expand All @@ -79,13 +79,24 @@ class ChatClient {
private var isConnecting = false
var loggedIn = false

private val serializerGson by lazy {
GsonBuilder()
.registerTypeAdapter(Packet::class.java, serializer)
.create()
}

private val deserializerGson by lazy {
GsonBuilder()
.registerTypeAdapter(Packet::class.java, deserializer)
.create()
}

fun connectAsync() {
if (isConnecting || connected) {
return
}

// Async connecting using IO worker from Minecraft
Util.getIoWorkerExecutor().execute {
withScope {
connect()
}
}
Expand All @@ -95,7 +106,7 @@ class ChatClient {
* Supports SSL and non-SSL connections.
* Be aware SSL takes insecure certificates.
*/
fun connect() = runCatching {
private fun connect() = runCatching {
EventManager.callEvent(ClientChatStateChange(ClientChatStateChange.State.CONNECTING))
isConnecting = true
loggedIn = false
Expand All @@ -104,7 +115,7 @@ class ChatClient {

val ssl = uri.scheme.equals("wss", true)
val sslContext = if (ssl) {
SslContext.newClientContext(InsecureTrustManagerFactory.INSTANCE)
SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build()
} else {
null
}
Expand Down Expand Up @@ -227,11 +238,7 @@ class ChatClient {
* Send packet to server
*/
internal fun sendPacket(packet: Packet) {
val gson = GsonBuilder()
.registerTypeAdapter(Packet::class.java, serializer)
.create()

channel?.writeAndFlush(TextWebSocketFrame(gson.toJson(packet, Packet::class.java)))
channel?.writeAndFlush(TextWebSocketFrame(serializerGson.toJson(packet, Packet::class.java)))
}

private fun handleFunctionalPacket(packet: Packet) {
Expand Down Expand Up @@ -315,11 +322,7 @@ class ChatClient {
* Handle incoming message of websocket
*/
internal fun handlePlainMessage(message: String) {
val gson = GsonBuilder()
.registerTypeAdapter(Packet::class.java, deserializer)
.create()

val packet = gson.fromJson(message, Packet::class.java)
val packet = deserializerGson.fromJson(message, Packet::class.java)
handleFunctionalPacket(packet)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ class PacketSerializer : JsonSerializer<Packet> {
packetRegistry[packetClass] = packetName
}

inline fun <reified T : Packet> register(name: String) {
registerPacket(name, T::class.java)
}

/**
* Gson invokes this call-back method during serialization when it encounters a field of the
* specified type.
Expand Down Expand Up @@ -80,6 +84,10 @@ class PacketDeserializer : JsonDeserializer<Packet> {
packetRegistry[packetName] = packetClass
}

inline fun <reified T : Packet> register(name: String) {
registerPacket(name, T::class.java)
}

/**
* Gson invokes this call-back method during deserialization when it encounters a field of the
* specified type.
Expand Down

0 comments on commit a97fd4f

Please sign in to comment.