mirai/mirai-core
AdoptOSS 397d824d33
[core] enhance(ECDH): reconstruct ECDH (#2161)
* enhance(ECDH): reconstruct ECDH
common: 移动特定于 QQ 平台的实现到 OicqECDH,重新设计 ECDH,使 ECDH 类只针对算法本身,而不过多包括 QQ 协议的使用细节
jvm: 尝试优先使用平台加密实现,可能改善性能
jvm & android: 使用 curveName `secp256r1` 代替 `prime256v1`,前者在 Java 中更常用,可以被更多的 JCE 实现所识别(虽然都是指同一条曲线)
android: 使用系统自带的实现以减少依赖,并尝试兼容 Android P+ 版本
native: 中间储存时保留OpenSSL内部结构而不反复 new & free,提高性能
    (为了实现智能指针,需要用到 `@ExperimentalStdlibApi` 的 `createCleaner`,但这种风险应该可以接受)
native: 直接使用 point/bignum 到 bytes 的转换,避免了 hex string 作为中间层,提高效率

* test(ECDH): fix AndroidTest

* style(Ecdh): obey official Kotlin coding conventions
> When using an acronym as part of a declaration name, capitalize it if it consists of two letters (IOStream); capitalize only the first letter if it is longer (XmlFormatter, HttpInputStream).
> [View origin](https://kotlinlang.org/docs/coding-conventions.html)

Co-authored-by: ArcticLampyrid <arcticlampyrid@outlook.com>
2022-09-11 20:14:39 +08:00
..
compatibility-validation Fix project structure for Dokka 2022-01-06 20:26:52 +00:00
src [core] enhance(ECDH): reconstruct ECDH (#2161) 2022-09-11 20:14:39 +08:00
.gitignore Implement mirai-core for native 2022-07-20 00:30:16 +08:00
build.gradle.kts [core] enhance(ECDH): reconstruct ECDH (#2161) 2022-09-11 20:14:39 +08:00
README.md Update docs and improve source code readability 2021-05-09 15:31:50 +08:00

mirai-core

mirai 核心实现模块。首先阅读 mirai-core-api/README.md

本文仅介绍重要部分。

架构

包名 描述
net.mamoe.mirai.internal mirai 核心 API 的实现
.contact 联系人实现
.message 消息系统的实现
.network 网络层实现
.utils 工具类

net.mamoe.mirai.internal.contact

AbstractContact

AbstractContact.kt

所有 Contact 实现的基类. 实现生命周期等.

SendMessageHandler

SendMessageHandler.kt

处理 mirai 消息系统 Message 到协议数据结构的转换, 并处理长消息上传, 音乐转发上传等.

net.mamoe.mirai.internal.message

ReceiveMessageTransformer

ReceiveMessageHandler.kt

处理协议数据结构到 Message 的转换. 设有 RefinableMessage 处理长消息下载, 合并转发下载并展开等.

RefinableMessage

RefinableMessage.kt

支持处理长消息下载, 合并转发下载并展开等.

Image 实现

imagesImpl.kt

图片的实现的基类为 AbstractImage.

在底层协议, 群图片与私聊图片很不同. 因此图片实现可以是 GroupImageFriendImage.

图片又细分了 OnlineImageOfflineImage. 故有 OnlineGroupImage 等四个类型, 及他们分别的 Impl.

OnlineImage 为通过 Contact.uploadImage 上传得到的, 或刚刚从服务器接收的图片对象. OfflineImage 则为反序列化得到的对象.

MessageSource 实现

MessageSourceInternal.kt

MessageSource 在协议底层十分复杂,