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

Typedefs

CallHandler = Future<Object?> Function(List<Object?> args)
JsonMap = Map<String, Object?>

Exceptions / Errors

DRException
SDK 的全部错误(《3.接口设计》第 2 节)。服务端的错误原样带上 code 和 details; SDK 自己产生的 source 为 ErrorSource.local。