1
0
mirror of https://github.com/mamoe/mirai.git synced 2025-04-25 04:50:26 +08:00

Fix MessageProtocol loading

This commit is contained in:
Him188 2022-06-01 02:38:10 +01:00
parent aabcff628a
commit 900a7ed92d
No known key found for this signature in database
GPG Key ID: BA439CDDCF652375
4 changed files with 12 additions and 3 deletions
mirai-core-utils/src/nativeMain/kotlin
mirai-core/src/commonMain/kotlin

View File

@ -38,7 +38,7 @@ public object Services {
}
}
public fun implementations(baseClass: String): List<Any>? {
public fun implementations(baseClass: String): List<Lazy<Any>>? {
lock.withLock {
return registered[baseClass]?.map { it.instance }
}
@ -66,7 +66,7 @@ public actual fun <T : Any> loadService(
?: error("Could not load service '${clazz.qualifiedName ?: clazz}'. Current services: ${Services.print()}")
public actual fun <T : Any> loadServices(clazz: KClass<out T>): Sequence<T> =
Services.implementations(qualifiedNameOrFail(clazz))?.asSequence().orEmpty().castUp()
Services.implementations(qualifiedNameOrFail(clazz))?.asSequence()?.map { it.value }.orEmpty().castUp()
private fun <T : Any> qualifiedNameOrFail(clazz: KClass<out T>) =
clazz.qualifiedName ?: error("Could not find qualifiedName for $clazz")

View File

@ -30,6 +30,7 @@ internal abstract class MessageProtocol(
}
fun collectProcessors(processorCollector: ProcessorCollector) {
println("collectProcessors, this=$this, class=${this::class}")
processorCollector.collectProcessorsImpl()
}

View File

@ -172,8 +172,10 @@ internal class MessageProtocolFacadeImpl(
val instances = protocols
.sortedWith(MessageProtocol.PriorityComparator.reversed())
for (instance in instances) {
println("instance: $instance, class=${instance::class}")
instance.collectProcessors(object : ProcessorCollector() {
override fun <T : SingleMessage> add(encoder: MessageEncoder<T>, elementType: KClass<T>) {
println("add: $encoder, $elementType")
this@MessageProtocolFacadeImpl.encoderPipeline.registerProcessor(
MessageEncoderProcessor(
encoder,
@ -183,22 +185,27 @@ internal class MessageProtocolFacadeImpl(
}
override fun add(decoder: MessageDecoder) {
println("add: $decoder")
this@MessageProtocolFacadeImpl.decoderPipeline.registerProcessor(MessageDecoderProcessor(decoder))
}
override fun add(preprocessor: OutgoingMessagePreprocessor) {
println("add: $preprocessor")
preprocessorPipeline.registerProcessor(OutgoingMessageProcessorAdapter(preprocessor))
}
override fun add(transformer: OutgoingMessageTransformer) {
println("add: $transformer")
outgoingPipeline.registerProcessor(OutgoingMessageProcessorAdapter(transformer))
}
override fun add(sender: OutgoingMessageSender) {
println("add: $sender")
outgoingPipeline.registerProcessor(OutgoingMessageProcessorAdapter(sender))
}
override fun add(postprocessor: OutgoingMessagePostprocessor) {
println("add: $postprocessor")
outgoingPipeline.registerProcessor(OutgoingMessageProcessorAdapter(postprocessor))
}
})

View File

@ -9,7 +9,6 @@
package net.mamoe.mirai.internal.pipeline
import io.ktor.util.collections.*
import io.ktor.utils.io.core.*
import net.mamoe.mirai.internal.message.contextualBugReportException
import net.mamoe.mirai.internal.message.protocol.outgoing.OutgoingMessagePipelineContext
@ -202,8 +201,10 @@ protected constructor(
override val processors: MutableDeque<ProcessorBox<P>> = ConcurrentLinkedDeque()
override fun registerProcessor(processor: P): ProcessorPipeline.DisposableRegistry {
println("registerProcessor: $processor")
val box = ProcessorBox(processor)
processors.add(box)
println("processors.add fin")
return ProcessorPipeline.DisposableRegistry {
processors.remove(box)
}