From fa389f40bb4ad31ab3abbc99abecc7e5002b6e28 Mon Sep 17 00:00:00 2001 From: Karlatemp Date: Sat, 1 Jul 2023 16:19:18 +0800 Subject: [PATCH] Refactor attachToBot to Factory --- .../components/EncryptServiceHolder.kt | 6 ++-- .../commonMain/kotlin/spi/EncryptService.kt | 31 +++++++++---------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/mirai-core/src/commonMain/kotlin/network/components/EncryptServiceHolder.kt b/mirai-core/src/commonMain/kotlin/network/components/EncryptServiceHolder.kt index 6cc3c382b..c68f82865 100644 --- a/mirai-core/src/commonMain/kotlin/network/components/EncryptServiceHolder.kt +++ b/mirai-core/src/commonMain/kotlin/network/components/EncryptServiceHolder.kt @@ -13,7 +13,6 @@ import net.mamoe.mirai.internal.AbstractBot import net.mamoe.mirai.internal.network.component.ComponentKey import net.mamoe.mirai.internal.spi.EncryptService import net.mamoe.mirai.internal.spi.EncryptServiceContext -import net.mamoe.mirai.internal.spi.GlobalEncryptServiceUsage import net.mamoe.mirai.internal.utils.actualCacheDir import net.mamoe.mirai.internal.utils.workingDirPath import net.mamoe.mirai.utils.buildTypeSafeMap @@ -45,9 +44,8 @@ internal class EncryptServiceHolderImpl( get() = service0 ?: error("Encrypt Service not available") init { - @OptIn(GlobalEncryptServiceUsage::class) - EncryptService.instance?.let { globalService -> - service0 = globalService.attachToBot( + EncryptService.factory?.let { globalService -> + service0 = globalService.createForBot( EncryptServiceContext(bot.id, buildTypeSafeMap { set(EncryptServiceContext.KEY_BOT_PROTOCOL, bot.configuration.protocol) set(EncryptServiceContext.KEY_DEVICE_INFO, ssoProcessorContext.device) diff --git a/mirai-core/src/commonMain/kotlin/spi/EncryptService.kt b/mirai-core/src/commonMain/kotlin/spi/EncryptService.kt index 7f8951045..ccb3d5be5 100644 --- a/mirai-core/src/commonMain/kotlin/spi/EncryptService.kt +++ b/mirai-core/src/commonMain/kotlin/spi/EncryptService.kt @@ -42,15 +42,7 @@ public class EncryptServiceContext @MiraiInternalApi constructor( /** * @since 2.15.0 */ -public interface EncryptService : BaseService { - /** service per bot */ - public fun attachToBot(context: EncryptServiceContext, serviceSubScope: CoroutineScope): EncryptService { - /* cleanup: - serviceSubScope.coroutineContext.job.invokeOnCompletion { } - */ - return this - } - +public interface EncryptService { public fun initialize(context: EncryptServiceContext) /** @@ -91,8 +83,20 @@ public interface EncryptService : BaseService { public suspend fun sendMessage(remark: String, commandName: String, uin: Long, data: ByteArray): ChannelResult? } + // net.mamoe.mirai.internal.spi.EncryptService$Factory + public interface Factory : BaseService { + + /* + * cleanup: + * serviceSubScope.coroutineContext.job.invokeOnCompletion { } + */ + public fun createForBot(context: EncryptServiceContext, serviceSubScope: CoroutineScope): EncryptService + } + + public companion object { - private val loader = SpiServiceLoader(EncryptService::class) + + private val loader = SpiServiceLoader(Factory::class) private val warningAlert: Unit by lazy { val log = MiraiLogger.Factory.create(EncryptService::class, "EncryptService.alert") @@ -113,15 +117,10 @@ public interface EncryptService : BaseService { } - @GlobalEncryptServiceUsage - internal val instance: EncryptService? + internal val factory: Factory? get() { warningAlert return loader.service } } - } - -@RequiresOptIn(message = "Global encrypt service used", level = RequiresOptIn.Level.ERROR) -internal annotation class GlobalEncryptServiceUsage