Commit 848cc1b5 authored by Him188's avatar Him188

Add java-accessible functions in ContactSystem; Expose network as a `val`

parent 492918ff
...@@ -17,6 +17,8 @@ import net.mamoe.mirai.utils.BotConfiguration ...@@ -17,6 +17,8 @@ import net.mamoe.mirai.utils.BotConfiguration
import net.mamoe.mirai.utils.DefaultLogger import net.mamoe.mirai.utils.DefaultLogger
import net.mamoe.mirai.utils.MiraiInternalAPI import net.mamoe.mirai.utils.MiraiInternalAPI
import net.mamoe.mirai.utils.MiraiLogger import net.mamoe.mirai.utils.MiraiLogger
import net.mamoe.mirai.utils.internal.PositiveNumbers
import net.mamoe.mirai.utils.internal.coerceAtLeastOrFail
import net.mamoe.mirai.utils.io.logStacktrace import net.mamoe.mirai.utils.io.logStacktrace
import kotlin.coroutines.CoroutineContext import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.coroutineContext import kotlin.coroutines.coroutineContext
...@@ -86,7 +88,9 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo ...@@ -86,7 +88,9 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo
val contacts = ContactSystem() val contacts = ContactSystem()
lateinit var network: BotNetworkHandler<*> val network: BotNetworkHandler<*> get() = _network
private lateinit var _network: BotNetworkHandler<*>
init { init {
launch { launch {
...@@ -127,15 +131,15 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo ...@@ -127,15 +131,15 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo
logger.info("BotAccount: ${qqAccount.toLong()}") logger.info("BotAccount: ${qqAccount.toLong()}")
logger.info("Initializing BotNetworkHandler") logger.info("Initializing BotNetworkHandler")
try { try {
if (::network.isInitialized) { if (::_network.isInitialized) {
network.close(cause) _network.close(cause)
} }
} catch (e: Exception) { } catch (e: Exception) {
logger.error("Cannot close network handler", e) logger.error("Cannot close network handler", e)
} }
network = TIMBotNetworkHandler(this@Bot.coroutineContext + configuration, this@Bot) _network = TIMBotNetworkHandler(this@Bot.coroutineContext + configuration, this@Bot)
return network.login() return _network.login()
} }
/** /**
...@@ -178,12 +182,22 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo ...@@ -178,12 +182,22 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo
* 注: 这个方法是线程安全的 * 注: 这个方法是线程安全的
*/ */
@UseExperimental(MiraiInternalAPI::class) @UseExperimental(MiraiInternalAPI::class)
@JvmSynthetic
suspend fun getQQ(id: UInt): QQ = suspend fun getQQ(id: UInt): QQ =
if (_qqs.containsKey(id)) _qqs[id]!! if (_qqs.containsKey(id)) _qqs[id]!!
else qqsLock.withLock { else qqsLock.withLock {
_qqs.getOrPut(id) { QQImpl(bot, id, coroutineContext) } _qqs.getOrPut(id) { QQImpl(bot, id, coroutineContext) }
} }
// NO INLINE!! to help Java
@UseExperimental(MiraiInternalAPI::class)
suspend fun getQQ(id: Long): QQ = id.coerceAtLeastOrFail(0).toUInt().let {
if (_qqs.containsKey(it)) _qqs[it]!!
else qqsLock.withLock {
_qqs.getOrPut(it) { QQImpl(bot, it, coroutineContext) }
}
}
/** /**
* 获取缓存的群对象. 若没有对应的缓存, 则会创建一个. * 获取缓存的群对象. 若没有对应的缓存, 则会创建一个.
* *
...@@ -203,11 +217,20 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo ...@@ -203,11 +217,20 @@ class Bot(val account: BotAccount, val logger: MiraiLogger, context: CoroutineCo
_groups.getOrPut(it) { Group(bot, id, coroutineContext) } _groups.getOrPut(it) { Group(bot, id, coroutineContext) }
} }
} }
// NO INLINE!! to help Java
@UseExperimental(MiraiInternalAPI::class)
suspend fun getGroup(@PositiveNumbers id: Long): Group = id.coerceAtLeastOrFail(0).toUInt().let {
if (_groups.containsKey(it)) _groups[it]!!
else groupsLock.withLock {
_groups.getOrPut(it) { Group(bot, GroupId(it), coroutineContext) }
}
}
} }
@UseExperimental(MiraiInternalAPI::class) @UseExperimental(MiraiInternalAPI::class)
suspend fun close() { fun close() {
network.close() _network.close()
this.coroutineContext.cancelChildren() this.coroutineContext.cancelChildren()
contacts._groups.clear() contacts._groups.clear()
contacts._qqs.clear() contacts._qqs.clear()
......
...@@ -25,7 +25,7 @@ import kotlin.jvm.JvmOverloads ...@@ -25,7 +25,7 @@ import kotlin.jvm.JvmOverloads
*/ */
//Contacts //Contacts
suspend inline fun Bot.getQQ(@PositiveNumbers number: Long): QQ = this.contacts.getQQ(number.coerceAtLeastOrFail(0).toUInt()) suspend inline fun Bot.getQQ(@PositiveNumbers number: Long): QQ = this.contacts.getQQ(number)
suspend inline fun Bot.getQQ(number: UInt): QQ = this.contacts.getQQ(number) suspend inline fun Bot.getQQ(number: UInt): QQ = this.contacts.getQQ(number)
......
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