Better memory management

This commit is contained in:
Him188 2020-02-22 11:36:19 +08:00
parent da2b279a19
commit 0e30d3d69b
7 changed files with 29 additions and 28 deletions

View File

@ -306,20 +306,19 @@ internal class MemberImpl(
}
internal class MemberInfoImpl(
private val jceInfo: StTroopMemberInfo,
private val groupOwnerId: Long
jceInfo: StTroopMemberInfo,
groupOwnerId: Long
) : MemberInfo {
override val uin: Long get() = jceInfo.memberUin
override val nameCard: String get() = jceInfo.sName ?: ""
override val nick: String get() = jceInfo.nick
override val permission: MemberPermission
get() = when {
jceInfo.memberUin == groupOwnerId -> MemberPermission.OWNER
jceInfo.dwFlag == 1L -> MemberPermission.ADMINISTRATOR
else -> MemberPermission.MEMBER
}
override val specialTitle: String get() = jceInfo.sSpecialTitle ?: ""
override val muteTimestamp: Int get() = jceInfo.dwShutupTimestap?.toInt() ?: 0
override val uin: Long = jceInfo.memberUin
override val nameCard: String = jceInfo.sName ?: ""
override val nick: String = jceInfo.nick
override val permission: MemberPermission = when {
jceInfo.memberUin == groupOwnerId -> MemberPermission.OWNER
jceInfo.dwFlag == 1L -> MemberPermission.ADMINISTRATOR
else -> MemberPermission.MEMBER
}
override val specialTitle: String = jceInfo.sSpecialTitle ?: ""
override val muteTimestamp: Int = jceInfo.dwShutupTimestap?.toInt() ?: 0
}
/**

View File

@ -74,8 +74,6 @@ internal class OnlinePush {
// println(pbPushMsg.msg.msgBody.richText.contentToString())
val flags = extraInfo?.flags ?: 0
return GroupMessage(
bot = bot,
group = group,
senderName = pbPushMsg.msg.msgHead.groupInfo.groupCard,
sender = group[pbPushMsg.msg.msgHead.fromUin],
message = pbPushMsg.msg.toMessageChain(),

View File

@ -9,7 +9,6 @@
package net.mamoe.mirai.message
import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.utils.MiraiInternalAPI
@ -18,7 +17,7 @@ import net.mamoe.mirai.utils.MiraiInternalAPI
* 平台相关扩展
*/
@UseExperimental(MiraiInternalAPI::class)
actual abstract class MessagePacket<TSender : QQ, TSubject : Contact> actual constructor(bot: Bot) : MessagePacketBase<TSender, TSubject>(bot) {
actual abstract class MessagePacket<TSender : QQ, TSubject : Contact> actual constructor() : MessagePacketBase<TSender, TSubject>() {
// suspend inline fun uploadImage(image: Bitmap): Image = subject.uploadImage(image)
//suspend inline fun uploadImage(image: URL): Image = subject.uploadImage(image)
//suspend inline fun uploadImage(image: Input): Image = subject.uploadImage(image)

View File

@ -13,12 +13,16 @@ import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.event.BroadcastControllable
import net.mamoe.mirai.message.data.MessageChain
import net.mamoe.mirai.utils.getValue
import net.mamoe.mirai.utils.unsafeWeakRef
class FriendMessage(
bot: Bot,
override val sender: QQ,
sender: QQ,
override val message: MessageChain
) : MessagePacket<QQ, QQ>(bot), BroadcastControllable {
) : MessagePacket<QQ, QQ>(), BroadcastControllable {
override val sender: QQ by sender.unsafeWeakRef()
override val bot: Bot get() = sender.bot
override val subject: QQ get() = sender
override fun toString(): String = "FriendMessage(sender=${sender.id}, message=$message)"

View File

@ -22,8 +22,6 @@ import kotlin.jvm.JvmName
@Suppress("unused", "NOTHING_TO_INLINE")
class GroupMessage(
bot: Bot,
group: Group,
val senderName: String,
/**
* 发送方权限.
@ -31,9 +29,10 @@ class GroupMessage(
val permission: MemberPermission,
sender: Member,
override val message: MessageChain
) : MessagePacket<Member, Group>(bot), Event {
val group: Group by group.unsafeWeakRef()
) : MessagePacket<Member, Group>(), Event {
override val sender: Member by sender.unsafeWeakRef()
val group: Group get() = sender.group
override val bot: Bot get() = sender.bot
override val subject: Group get() = group

View File

@ -32,18 +32,19 @@ import kotlin.jvm.JvmName
* 请查看各平台的 `actual` 实现的说明.
*/
@UseExperimental(MiraiInternalAPI::class)
expect abstract class MessagePacket<TSender : QQ, TSubject : Contact>(bot: Bot) : MessagePacketBase<TSender, TSubject>
expect abstract class MessagePacket<TSender : QQ, TSubject : Contact>() : MessagePacketBase<TSender, TSubject>
/**
* 仅内部使用, 请使用 [MessagePacket]
*/ // Tips: 在 IntelliJ 中 (左侧边栏) 打开 `Structure`, 可查看类结构
@Suppress("NOTHING_TO_INLINE", "UNCHECKED_CAST")
@MiraiInternalAPI
abstract class MessagePacketBase<TSender : QQ, TSubject : Contact>(_bot: Bot) : Packet, BotEvent {
abstract class MessagePacketBase<TSender : QQ, TSubject : Contact> : Packet, BotEvent {
/**
* 接受到这条消息的
*/
override val bot: Bot by _bot.unsafeWeakRef()
@WeakRefProperty
abstract override val bot: Bot
/**
* 消息事件主体.
@ -53,6 +54,7 @@ abstract class MessagePacketBase<TSender : QQ, TSubject : Contact>(_bot: Bot) :
*
* 在回复消息时, 可通过 [subject] 作为回复对象
*/
@WeakRefProperty
abstract val subject: TSubject
/**
@ -60,6 +62,7 @@ abstract class MessagePacketBase<TSender : QQ, TSubject : Contact>(_bot: Bot) :
*
* 在好友消息时为 [QQ] 的实例, 在群消息时为 [Member] 的实例
*/
@WeakRefProperty
abstract val sender: TSender
/**

View File

@ -16,7 +16,6 @@ import kotlinx.coroutines.withContext
import kotlinx.io.core.Input
import kotlinx.io.core.use
import kotlinx.io.streams.inputStream
import net.mamoe.mirai.Bot
import net.mamoe.mirai.contact.Contact
import net.mamoe.mirai.contact.QQ
import net.mamoe.mirai.message.data.Image
@ -35,7 +34,7 @@ import javax.imageio.ImageIO
* JVM 平台相关扩展
*/
@UseExperimental(MiraiInternalAPI::class)
actual abstract class MessagePacket<TSender : QQ, TSubject : Contact> actual constructor(bot: Bot) : MessagePacketBase<TSender, TSubject>(bot) {
actual abstract class MessagePacket<TSender : QQ, TSubject : Contact> actual constructor() : MessagePacketBase<TSender, TSubject>() {
// region 上传图片
suspend inline fun uploadImage(image: BufferedImage): Image = subject.uploadImage(image)