internal library
SDK 内部的接口:只供 deeprespond_im_flutter、deeprespond_im_push、deeprespond_im_call 等同一套 SDK 的包使用, 不属于公开 API,随时可能改变,App 不要使用。
Classes
- ApiRequest
- 一个客户端 API 请求。
- CallHandleImpl
- 一个通话的句柄(《sdk-web/3.接口设计》第 14 节,《sdk-web/2.功能概述文档》第 15 节)。 Flutter 没有多个标签页:媒体连接、心跳、令牌续期都在这个进程中;来电振铃和通话中保持后台连接(《2.功能概述文档》第 8 节)。
- CallsService
- 音视频(《sdk-web/3.接口设计》第 14 节,《sdk-web/2.功能概述文档》第 15 节,《2.功能概述文档》第 8 节)。 信令经长连接发出,不可用时用客户端 API;媒体连接、心跳在这个进程中。Flutter 没有多个标签页: Web SDK 中“没有标签页持有媒体连接而本设备仍在通话中”在 Flutter 中是 App 被杀后重新打开,SDK 代发心跳、把通话标为可以恢复, 由 deeprespond_im_call 调用 resume() 重新连接媒体。
- ChannelHandleImpl
- ChannelsService
- Channel control is HTTP only. One handle owns capture in the main isolate.
- ChatroomsService
- 聊天室(《sdk-web/3.接口设计》第 13 节,《sdk-web/2.功能概述文档》第 14 节)。聊天室属于连接: Flutter 没有多个标签页,按本进程进入的聊天室维护(《2.功能概述文档》第 2 节),不按标签页计数; 重新连接(含网络切换,《2.功能概述文档》第 5.2 节)后立即重新进入,在服务端判定离开(15 秒)之前回到聊天室。
- ClientModule
- 各模块与客户端核心之间的接口:登录后加载本地数据、退出时清除内存。
- Core
- 客户端核心:组装会话管理、传输层、本地存储和同步引擎(《4.实现与测试》第 4 节)。 Flutter SDK 中只有主 isolate 创建它;它持有长连接、执行同步、写本地数据库、负责续期,与 Web SDK 的主标签页相同。
-
Deferred<
T> - 可以在外部完成的 Future;重复完成时忽略。没有人等待时被拒绝不算未处理的错误。
- EventFrame
- 服务端的通知帧。
- FakeMediaProvider
-
测试用的假媒体适配(Dart VM 中没有 WebRTC,与 Web SDK 集成测试的假 LiveKit 适配相同):
连接立即成功,记下收到的凭据、续期和断开;
emit可以模拟媒体服务的事件。deeprespond_im_call 的测试也可以使用。 - FakeMediaSession
- FriendsLookup
- 显示辅助需要的好友备注(由好友模块实现)。
- GroupsLookup
- 消息模块需要的群组信息(由群组模块实现)。
-
KvInvalid<
T> -
KvMissing<
T> -
KvNewer<
T> - v 比本 SDK 认识的新(App 降级):按未登录处理,不覆盖(《1.本地存储》第 8 节)。
-
KvOk<
T> -
KvRead<
T> - 读取带格式版本 v 的 JSON 值(《1.本地存储》第 2、8 节)。
- KvStore
- 安全存储的同步视图:创建客户端时读入内存,写入时先改内存再按键依次写回安全存储(flush 等待写完)。 只有主 isolate 写入(《2.功能概述文档》第 6 节)。
- LocalErrorCode
- SDK 自己产生的错误码(《sdk-web/2.功能概述文档》第 17 节)。
- Logger
- MessagesHooks
- 推送模块需要的消息信息(由消息模块实现)。
- ModuleLogger
- Mutex
- 互斥锁:按先后执行。
- NotifyDecision
- 新消息是否提醒(推送模块的 shouldNotify,《sdk-web/3.接口设计》第 11 节)。
- PushLookup
- 消息模块需要的推送设置(由推送模块实现)。
- ResolvedOptions
- 解析后的创建选项。
- SecureKeys
- 安全存储中的键(《1.本地存储》第 2 节)。
- Semaphore
- 同时进行的数量上限,超出的按先后排队(同步时并行的 HTTP 请求 4 个)。
- Services
- 各模块的服务的登记处:模块之间经它按需查找(不在构造时互相依赖),客户端按顺序创建并连接。
Enums
- ErrorSource
- 错误的来源:服务端的 HTTP 接口、长连接,或 SDK 自己(《sdk-web/2.功能概述文档》第 17 节)。
Functions
-
abortedError(
) → DRException -
asBool(
Object? value) → bool? -
asInt(
Object? value) → int? -
asList(
Object? value) → List< Object?> ? -
asMap(
Object? value) → JsonMap? - 读取字段的辅助:类型不对时返回 null。
-
asNum(
Object? value) → num? -
asString(
Object? value) → String? -
backoffDelay(
int attempt, {required int baseMs, required int maxMs, double jitter = 0.5, int minMs = 0, required double random()}) → int -
退避间隔(《sdk-web/2.功能概述文档》第 6.4 节):从
baseMs开始逐次翻倍,最长maxMs,每次加减jitter比例的随机量, 并且不短于minMs。attempt从 0 开始。 -
charLength(
String text) → int - 字符(码点)数。
-
cloneJson(
Object? value) → Object? - 可以修改的深复制(App 传入的参数在保存前复制,之后不受 App 修改的影响)。
-
cloneMap(
Map< String, Object?> value) → JsonMap -
fireAndForget(
Future< Object?> future, [void onError(Object error)?]) → void -
不等待的 Future:出错时交给
onError(默认忽略)。 -
freezeJson(
Object? value) → Object? - 逐层复制为不可修改的 JSON 值(SDK 交给 App 的数据不可修改,《3.接口设计》第 2 节)。 已经不可修改的映射(由本函数产生的)原样返回。
-
freezeMap(
JsonMap value) → JsonMap -
goJsonLength(
String json) → int - 与 Go 的 encoding/json 输出相同的字节数:jsonEncode 的结果中 U+2028、U+2029、<、>、& 在 Go 中被转义为 6 个字节 (《sdk-web/2.功能概述文档》第 6.5、19 节)。
-
hasControlChars(
String text, {bool allowNewlines = false}) → bool - Unicode 的 Cc 类控制字符:U+0000~U+001F、U+007F~U+009F。
-
invalidState(
[String? reason, Map< String, Object?> ? extra]) → DRException -
isTransientError(
DRException err) → bool - 错误码属于“暂时故障”(《sdk-web/2.功能概述文档》第 17 节的分类)。
-
jsonEquals(
Object? a, Object? b) → bool - 两个 JSON 值是否相同(按内容比较)。
-
localError(
String code, {Map< String, Object?> ? details, String? message, int? retryAfter, Object? cause}) → DRException -
newRequestId(
RandomSource random) → String -
X-Request-ID:1 到 64 个
A-Za-z0-9._-(服务端原样沿用并写入日志,《2.功能概述文档》第 1 节)。 -
parseResponse<
T> (HttpResponseData response) → T - 解析响应:2xx 返回 JSON(204 和空响应为 null);错误转为 DRException。
-
parseTimeMs(
Object? value) → int? - RFC 3339 时间转为毫秒时间戳;解析不了的返回 null。
-
randomHex(
List< int> bytes) → String - 随机的十六进制串。
-
readVersioned(
KvStore kv, String key) → KvRead< Map< String, Object?> > -
retryAfterDelay(
int retryAfterSeconds, double random(), [double extra = 0.5]) → int - 服务端给出的等待时间加上 0~50% 的随机量(《sdk-web/4.实现与测试》第 4.3 节)。
-
scheduleDelay(
List< int> table, int attempt) → int - 固定的重试间隔表(秒),超出表长取最后一项。
-
shortHash(
String text) → String - SHA-256 的前 16 位十六进制(文件名不直接用 AppKey 和用户名,《1.本地存储》第 1 节)。
-
sleep(
DRClock clock, int ms, [DRCancelToken? cancel]) → Future< void> -
按给定的时钟等待;
cancel取消时以 aborted 抛出。 -
toDRException(
Object error, [String fallback = LocalErrorCode.networkError]) → DRException -
把任意异常转成 DRException:已经是的原样返回,其他的记为本地的
fallback。 -
toJsonText(
Object? value) → String - JSON 文本(与 JSON.stringify 相同,不转义非 ASCII)。
-
truncateChars(
String text, int max) → String - 按字符(Unicode 码点)截断。
-
truncateUtf8(
String text, int maxBytes) → String - 按 UTF-8 字节截断,不截断多字节字符。
-
utf8Length(
String text) → int - UTF-8 编码后的字节数。
-
validationError(
String reason, [String? field, Map< String, Object?> ? extra]) → DRException -
writeVersioned(
KvStore kv, String key, Map< String, Object?> value) → void
Exceptions / Errors
- DRException
- SDK 的全部错误(《3.接口设计》第 2 节)。服务端的错误原样带上 code 和 details; SDK 自己产生的 source 为 ErrorSource.local。