Commit 4261e201 authored by Him188's avatar Him188

Use BotConfiguration

parent 308988fa
...@@ -255,9 +255,8 @@ internal class TIMPCBotNetworkHandler internal constructor(coroutineContext: Cor ...@@ -255,9 +255,8 @@ internal class TIMPCBotNetworkHandler internal constructor(coroutineContext: Cor
if (e.cause !is CancellationException) { if (e.cause !is CancellationException) {
bot.logger.error("Caught SendPacketInternalException: ${e.cause?.message}") bot.logger.error("Caught SendPacketInternalException: ${e.cause?.message}")
} }
val configuration = bot.configuration delay(bot.configuration.firstReconnectDelayMillis)
delay(configuration.firstReconnectDelayMillis) bot.tryReinitializeNetworkHandler(e)
bot.tryReinitializeNetworkHandler(configuration, e)
return@withContext return@withContext
} finally { } finally {
buffer.release(IoBuffer.Pool) buffer.release(IoBuffer.Pool)
...@@ -468,7 +467,7 @@ internal class TIMPCBotNetworkHandler internal constructor(coroutineContext: Cor ...@@ -468,7 +467,7 @@ internal class TIMPCBotNetworkHandler internal constructor(coroutineContext: Cor
} == null) { } == null) {
bot.logger.warning("Heartbeat timed out") bot.logger.warning("Heartbeat timed out")
delay(configuration.firstReconnectDelayMillis) delay(configuration.firstReconnectDelayMillis)
bot.tryReinitializeNetworkHandler(configuration, HeartbeatTimeoutException()) bot.tryReinitializeNetworkHandler(HeartbeatTimeoutException())
return@launch return@launch
} }
} }
......
...@@ -379,7 +379,7 @@ when (idHex.substring(0, 5)) { ...@@ -379,7 +379,7 @@ when (idHex.substring(0, 5)) {
internal object DebugNetworkHandler : BotNetworkHandler(), CoroutineScope { internal object DebugNetworkHandler : BotNetworkHandler(), CoroutineScope {
override val supervisor: CompletableJob = SupervisorJob() override val supervisor: CompletableJob = SupervisorJob()
override val bot: Bot = TIMPC.run { this@DebugNetworkHandler.Bot(qq ?: 0L, "", null) } override val bot: Bot = TIMPC.Bot(qq ?: 0L, "", null)
override suspend fun login() {} override suspend fun login() {}
......
...@@ -22,6 +22,6 @@ class ReceiveFriendAddRequestEvent( ...@@ -22,6 +22,6 @@ class ReceiveFriendAddRequestEvent(
* *
* @param remark 备注名, 不设置则需为 `null` * @param remark 备注名, 不设置则需为 `null`
*/ */
@JvmOverloads // TODO: 2019/12/17 协议抽象 @JvmOverloads
suspend fun approve(remark: String? = null): Unit = qq.bot.approveFriendAddRequest(qq.id, remark) suspend fun approve(remark: String? = null): Unit = qq.bot.approveFriendAddRequest(qq.id, remark)
} }
...@@ -33,11 +33,13 @@ fun BytePacketBuilder.writeShortLVByteArray(byteArray: ByteArray) { ...@@ -33,11 +33,13 @@ fun BytePacketBuilder.writeShortLVByteArray(byteArray: ByteArray) {
this.writeFully(byteArray) this.writeFully(byteArray)
} }
fun BytePacketBuilder.writeShortLVPacket(tag: UByte? = null, lengthOffset: ((Long) -> Long)? = null, builder: BytePacketBuilder.() -> Unit) = fun BytePacketBuilder.writeShortLVPacket(tag: UByte? = null, lengthOffset: ((Long) -> Long)? = null, builder: BytePacketBuilder.() -> Unit): Int =
BytePacketBuilder().apply(builder).build().use { BytePacketBuilder().apply(builder).build().use {
if (tag != null) writeUByte(tag) if (tag != null) writeUByte(tag)
writeUShort((lengthOffset?.invoke(it.remaining) ?: it.remaining).coerceAtMostOrFail(0xFFFFL).toUShort()) val length = (lengthOffset?.invoke(it.remaining) ?: it.remaining).coerceAtMostOrFail(0xFFFFL)
writeUShort(length.toUShort())
writePacket(it) writePacket(it)
return length.toInt()
} }
fun BytePacketBuilder.writeUVarIntLVPacket(tag: UByte? = null, lengthOffset: ((Long) -> Long)? = null, builder: BytePacketBuilder.() -> Unit) = fun BytePacketBuilder.writeUVarIntLVPacket(tag: UByte? = null, lengthOffset: ((Long) -> Long)? = null, builder: BytePacketBuilder.() -> Unit) =
......
...@@ -41,17 +41,17 @@ class MiraiService : Service() { ...@@ -41,17 +41,17 @@ class MiraiService : Service() {
private fun login(qq: Long, pwd: String) { private fun login(qq: Long, pwd: String) {
GlobalScope.launch { GlobalScope.launch {
mBot = TIMPC.Bot(qq, pwd).apply { mBot = TIMPC.Bot(qq, pwd) {
captchaSolver = {
val bytes = it.readBytes()
val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
mCaptchaDeferred = CompletableDeferred()
mCallback?.get()?.onCaptcha(bitmap)
mCaptchaDeferred.await()
}
}.apply {
try { try {
login { login()
captchaSolver = {
val bytes = it.readBytes()
val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
mCaptchaDeferred = CompletableDeferred()
mCallback?.get()?.onCaptcha(bitmap)
mCaptchaDeferred.await()
}
}
mCallback?.get()?.onSuccess() mCallback?.get()?.onSuccess()
} catch (e: LoginFailedException) { } catch (e: LoginFailedException) {
mCallback?.get()?.onFailed() mCallback?.get()?.onFailed()
......
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