Commit a8039e5e authored by Him188's avatar Him188

Make addHandler suspend

parent e05ad6cf
...@@ -7,7 +7,6 @@ import net.mamoe.mirai.message.defaults.MessageChain ...@@ -7,7 +7,6 @@ import net.mamoe.mirai.message.defaults.MessageChain
import net.mamoe.mirai.message.defaults.PlainText import net.mamoe.mirai.message.defaults.PlainText
import net.mamoe.mirai.message.defaults.UnsolvedImage import net.mamoe.mirai.message.defaults.UnsolvedImage
import net.mamoe.mirai.network.LoginSession import net.mamoe.mirai.network.LoginSession
import java.util.concurrent.CompletableFuture
/** /**
* 联系人. * 联系人.
...@@ -25,7 +24,7 @@ abstract class Contact internal constructor(val bot: Bot, val number: Long) { ...@@ -25,7 +24,7 @@ abstract class Contact internal constructor(val bot: Bot, val number: Long) {
/** /**
* 上传图片 * 上传图片
*/ */
fun uploadImage(session: LoginSession, image: UnsolvedImage): CompletableDeferred<Unit> { suspend fun uploadImage(session: LoginSession, image: UnsolvedImage): CompletableDeferred<Unit> {
return image.upload(session, this) return image.upload(session, this)
} }
......
...@@ -16,7 +16,6 @@ import net.mamoe.mirai.utils.toUHexString ...@@ -16,7 +16,6 @@ import net.mamoe.mirai.utils.toUHexString
import java.awt.image.BufferedImage import java.awt.image.BufferedImage
import java.io.File import java.io.File
import java.net.URL import java.net.URL
import java.util.concurrent.CompletableFuture
import javax.imageio.ImageIO import javax.imageio.ImageIO
/** /**
...@@ -29,7 +28,8 @@ import javax.imageio.ImageIO ...@@ -29,7 +28,8 @@ import javax.imageio.ImageIO
class UnsolvedImage(filename: String, val image: BufferedImage) : Image(getImageId(filename)) { class UnsolvedImage(filename: String, val image: BufferedImage) : Image(getImageId(filename)) {
constructor(imageFile: File) : this(imageFile.name, ImageIO.read(imageFile)) constructor(imageFile: File) : this(imageFile.name, ImageIO.read(imageFile))
constructor(url: URL) : this(File(url.file)) constructor(url: URL) : this(File(url.file))
fun upload(session: LoginSession, contact: Contact): CompletableDeferred<Unit> {
suspend fun upload(session: LoginSession, contact: Contact): CompletableDeferred<Unit> {
return session.expectPacket<ServerTryGetImageIDResponsePacket> { return session.expectPacket<ServerTryGetImageIDResponsePacket> {
toSend { ClientTryGetImageIDPacket(session.bot.account.qqNumber, session.sessionKey, contact.number, image) } toSend { ClientTryGetImageIDPacket(session.bot.account.qqNumber, session.sessionKey, contact.number, image) }
......
...@@ -62,7 +62,7 @@ interface BotNetworkHandler { ...@@ -62,7 +62,7 @@ interface BotNetworkHandler {
* *
* @see [TemporaryPacketHandler] * @see [TemporaryPacketHandler]
*/ */
fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>) suspend fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>)
fun close() fun close()
} }
\ No newline at end of file
...@@ -58,7 +58,7 @@ class LoginSession( ...@@ -58,7 +58,7 @@ class LoginSession(
* @return future. 可进行超时处理 * @return future. 可进行超时处理
*/ */
@JvmSynthetic @JvmSynthetic
inline fun <reified P : ServerPacket> expectPacket(handlerTemporary: TemporaryPacketHandler<P>.() -> Unit): CompletableDeferred<Unit> { suspend inline fun <reified P : ServerPacket> expectPacket(handlerTemporary: TemporaryPacketHandler<P>.() -> Unit): CompletableDeferred<Unit> {
val deferred = CompletableDeferred<Unit>() val deferred = CompletableDeferred<Unit>()
this.bot.network.addHandler(TemporaryPacketHandler(P::class, deferred, this).also(handlerTemporary)) this.bot.network.addHandler(TemporaryPacketHandler(P::class, deferred, this).also(handlerTemporary))
return deferred return deferred
...@@ -82,7 +82,7 @@ class LoginSession( ...@@ -82,7 +82,7 @@ class LoginSession(
* @return future. 可进行超时处理 * @return future. 可进行超时处理
*/ */
@JvmSynthetic @JvmSynthetic
inline fun <reified P : ServerPacket> expectPacket(toSend: ClientPacket, noinline handler: suspend (P) -> Unit): CompletableDeferred<Unit> { suspend inline fun <reified P : ServerPacket> expectPacket(toSend: ClientPacket, noinline handler: suspend (P) -> Unit): CompletableDeferred<Unit> {
val deferred = CompletableDeferred<Unit>() val deferred = CompletableDeferred<Unit>()
this.bot.network.addHandler(TemporaryPacketHandler(P::class, deferred, this).also { this.bot.network.addHandler(TemporaryPacketHandler(P::class, deferred, this).also {
it.toSend(toSend) it.toSend(toSend)
......
...@@ -46,10 +46,8 @@ internal class TIMBotNetworkHandler(private val bot: Bot) : BotNetworkHandler { ...@@ -46,10 +46,8 @@ internal class TIMBotNetworkHandler(private val bot: Bot) : BotNetworkHandler {
internal val temporaryPacketHandlers = Collections.synchronizedList(mutableListOf<TemporaryPacketHandler<*>>()) internal val temporaryPacketHandlers = Collections.synchronizedList(mutableListOf<TemporaryPacketHandler<*>>())
override fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>) { override suspend fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>) {
runBlocking { temporaryPacketHandler.send(action.session)
temporaryPacketHandler.send(action.session)
}
temporaryPacketHandlers.add(temporaryPacketHandler) temporaryPacketHandlers.add(temporaryPacketHandler)
} }
......
...@@ -21,7 +21,7 @@ import kotlin.system.exitProcess ...@@ -21,7 +21,7 @@ import kotlin.system.exitProcess
*/ */
suspend fun main() { suspend fun main() {
val bot = Bot(BotAccount(//填写你的账号 val bot = Bot(BotAccount(//填写你的账号
qqNumber = 1994701021, qqNumber = 1994701121,
password = "xiaoqqq" password = "xiaoqqq"
), Console()) ), Console())
......
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