Migrate to data class

This commit is contained in:
Him188 2019-11-08 20:10:45 +08:00
parent 70ae02f83e
commit a4ea0772e6
2 changed files with 56 additions and 37 deletions

View File

@ -357,18 +357,10 @@ 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(
@ -383,6 +375,14 @@ internal class TIMBotNetworkHandler internal constructor(override inline val bot
) )
) )
} }
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())
}
} }
is SubmitPasswordPacket.LoginResponse.Failed -> { is SubmitPasswordPacket.LoginResponse.Failed -> {

View File

@ -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 suspend fun ByteReadPacket.decode(id: PacketId, sequenceId: UShort, handler: BotNetworkHandler<*>): TouchResponse = TouchResponse().apply { 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 {
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())