mirror of
https://github.com/mamoe/mirai.git
synced 2025-01-25 07:30:14 +08:00
Migrate to data class
This commit is contained in:
parent
70ae02f83e
commit
a4ea0772e6
@ -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 -> {
|
||||||
|
@ -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())
|
||||||
|
Loading…
Reference in New Issue
Block a user