mirror of
https://github.com/mamoe/mirai.git
synced 2025-04-25 04:50:26 +08:00
Make addHandler suspend
This commit is contained in:
parent
e05ad6cf6a
commit
a8039e5e1f
mirai-core/src/jvmMain/kotlin/net/mamoe/mirai
contact
message/defaults
network
mirai-demos/mirai-demo-1/src/main/java/demo1
@ -7,7 +7,6 @@ import net.mamoe.mirai.message.defaults.MessageChain
|
||||
import net.mamoe.mirai.message.defaults.PlainText
|
||||
import net.mamoe.mirai.message.defaults.UnsolvedImage
|
||||
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) {
|
||||
/**
|
||||
* 上传图片
|
||||
*/
|
||||
fun uploadImage(session: LoginSession, image: UnsolvedImage): CompletableDeferred<Unit> {
|
||||
suspend fun uploadImage(session: LoginSession, image: UnsolvedImage): CompletableDeferred<Unit> {
|
||||
return image.upload(session, this)
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,6 @@ import net.mamoe.mirai.utils.toUHexString
|
||||
import java.awt.image.BufferedImage
|
||||
import java.io.File
|
||||
import java.net.URL
|
||||
import java.util.concurrent.CompletableFuture
|
||||
import javax.imageio.ImageIO
|
||||
|
||||
/**
|
||||
@ -29,7 +28,8 @@ import javax.imageio.ImageIO
|
||||
class UnsolvedImage(filename: String, val image: BufferedImage) : Image(getImageId(filename)) {
|
||||
constructor(imageFile: File) : this(imageFile.name, ImageIO.read(imageFile))
|
||||
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> {
|
||||
toSend { ClientTryGetImageIDPacket(session.bot.account.qqNumber, session.sessionKey, contact.number, image) }
|
||||
|
||||
|
@ -62,7 +62,7 @@ interface BotNetworkHandler {
|
||||
*
|
||||
* @see [TemporaryPacketHandler]
|
||||
*/
|
||||
fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>)
|
||||
suspend fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>)
|
||||
|
||||
fun close()
|
||||
}
|
@ -58,7 +58,7 @@ class LoginSession(
|
||||
* @return future. 可进行超时处理
|
||||
*/
|
||||
@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>()
|
||||
this.bot.network.addHandler(TemporaryPacketHandler(P::class, deferred, this).also(handlerTemporary))
|
||||
return deferred
|
||||
@ -82,7 +82,7 @@ class LoginSession(
|
||||
* @return future. 可进行超时处理
|
||||
*/
|
||||
@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>()
|
||||
this.bot.network.addHandler(TemporaryPacketHandler(P::class, deferred, this).also {
|
||||
it.toSend(toSend)
|
||||
|
@ -46,10 +46,8 @@ internal class TIMBotNetworkHandler(private val bot: Bot) : BotNetworkHandler {
|
||||
internal val temporaryPacketHandlers = Collections.synchronizedList(mutableListOf<TemporaryPacketHandler<*>>())
|
||||
|
||||
|
||||
override fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>) {
|
||||
runBlocking {
|
||||
temporaryPacketHandler.send(action.session)
|
||||
}
|
||||
override suspend fun addHandler(temporaryPacketHandler: TemporaryPacketHandler<*>) {
|
||||
temporaryPacketHandler.send(action.session)
|
||||
temporaryPacketHandlers.add(temporaryPacketHandler)
|
||||
}
|
||||
|
||||
|
@ -21,7 +21,7 @@ import kotlin.system.exitProcess
|
||||
*/
|
||||
suspend fun main() {
|
||||
val bot = Bot(BotAccount(//填写你的账号
|
||||
qqNumber = 1994701021,
|
||||
qqNumber = 1994701121,
|
||||
password = "xiaoqqq"
|
||||
), Console())
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user