Commit a4ea0772 authored by Him188's avatar Him188

Migrate to data class

parent 70ae02f8
...@@ -357,31 +357,31 @@ internal class TIMBotNetworkHandler internal constructor(override inline val bot ...@@ -357,31 +357,31 @@ internal class TIMBotNetworkHandler internal constructor(override inline val bot
suspend fun onPacketReceived(packet: Any) {//complex function, but it doesn't matter suspend fun onPacketReceived(packet: Any) {//complex function, but it doesn't matter
when (packet) { when (packet) {
is TouchPacket.TouchResponse -> { is TouchPacket.TouchResponse.OK -> {
if (packet.serverIP != null) {//redirection loginIP = packet.loginIP
withContext(userContext) { loginTime = packet.loginTime
socket.close() token0825 = packet.token0825
socket = BotSocketAdapter(packet.serverIP!!, socket.configuration)
bot.logger.info("Redirecting to ${packet.serverIP}")
loginResult.complete(socket.resendTouch())
}
} else {//password submission
this.loginIP = packet.loginIP
this.loginTime = packet.loginTime
this.token0825 = packet.token0825
socket.sendPacket( socket.sendPacket(
SubmitPasswordPacket( SubmitPasswordPacket(
bot = bot.qqAccount, bot = bot.qqAccount,
password = bot.account.password, password = bot.account.password,
loginTime = loginTime, loginTime = loginTime,
loginIP = loginIP, loginIP = loginIP,
privateKey = privateKey, privateKey = privateKey,
token0825 = token0825, token0825 = token0825,
token00BA = null, token00BA = null,
randomDeviceName = socket.configuration.randomDeviceName randomDeviceName = socket.configuration.randomDeviceName
)
) )
)
}
is TouchPacket.TouchResponse.Redirection -> {
withContext(userContext) {
socket.close()
socket = BotSocketAdapter(packet.serverIP!!, socket.configuration)
bot.logger.info("Redirecting to ${packet.serverIP}")
loginResult.complete(socket.resendTouch())
} }
} }
......
...@@ -44,31 +44,50 @@ object TouchPacket : PacketFactory<TouchPacket.TouchResponse, TouchKey>(TouchKey ...@@ -44,31 +44,50 @@ object TouchPacket : PacketFactory<TouchPacket.TouchResponse, TouchKey>(TouchKey
} }
} }
class TouchResponse : Packet { sealed class TouchResponse : Packet {
var serverIP: String? = null data class OK(
internal set var loginTime: Int,
var loginTime: Int = 0 val loginIP: String,
internal set val token0825: ByteArray
) : TouchResponse() {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is OK) return false
lateinit var loginIP: String if (loginTime != other.loginTime) return false
internal set if (loginIP != other.loginIP) return false
lateinit var token0825: ByteArray if (!token0825.contentEquals(other.token0825)) return false
internal set
return true
}
override fun hashCode(): Int {
var result = loginTime
result = 31 * result + loginIP.hashCode()
result = 31 * result + token0825.contentHashCode()
return result
}
}
data class Redirection(
val serverIP: String? = null
) : TouchResponse()
} }
override suspend fun ByteReadPacket.decode(id: PacketId, sequenceId: UShort, handler: BotNetworkHandler<*>): TouchResponse = TouchResponse().apply { override suspend fun ByteReadPacket.decode(id: PacketId, sequenceId: UShort, handler: BotNetworkHandler<*>): TouchResponse {
when (val flag = readByte().toUByte().toInt()) { when (val flag = readByte().toUByte().toInt()) {
0xFE -> { 0xFE -> {
discardExact(94) discardExact(94)
serverIP = readIP() return TouchResponse.Redirection(readIP())
} }
0x00 -> { 0x00 -> {
discardExact(4) discardExact(4)
token0825 = readBytes(56) val token0825 = readBytes(56)
discardExact(6) discardExact(6)
loginTime = readInt() val loginTime = readInt()
loginIP = readIP() val loginIP = readIP()
return TouchResponse.OK(loginTime, loginIP, token0825)
} }
else -> throw IllegalStateException(flag.toByte().toUHexString()) else -> throw IllegalStateException(flag.toByte().toUHexString())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment