CallsService class

音视频(《sdk-web/3.接口设计》第 14 节,《sdk-web/2.功能概述文档》第 15 节,《2.功能概述文档》第 8 节)。 信令经长连接发出,不可用时用客户端 API;媒体连接、心跳在这个进程中。Flutter 没有多个标签页: Web SDK 中“没有标签页持有媒体连接而本设备仍在通话中”在 Flutter 中是 App 被杀后重新打开,SDK 代发心跳、把通话标为可以恢复, 由 deeprespond_im_call 调用 resume() 重新连接媒体。

Inheritance

Constructors

CallsService(Core core, JsonMap? _config())

Properties

activeResults → Stream<ActiveCalls>
每次查询 calls/active 的结果(登录、重新连接、sync.required 后的同步,回到前台,以及直接调用 fetchActive): 来电包据此结束 current 和 incoming 中都没有的通话的来电通知和 CallKit 来电(《2.功能概述文档》第 8.6 节)。
no setter
core → Core
final
current → CallHandleImpl?
本人正在进行的通话。
no setter
hashCode → int
The hash code for this object.
no setterinherited
incoming → List<CallHandleImpl>
正在振铃的来电。
no setter
lightSync → bool
是否参与轻量同步;完整的重连同步总是参与。
no setter
log → ModuleLogger
final
me → String?
no setter
meOverride ↔ String? Function()?
测试用:替换本人的用户名。
getter/setter pair
providerKinds → List<String>
发起和接听时报告给服务端的 media_providers。
no setter
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
savedCurrentCallId → String?
meta 的 calls.current 中保存的正在进行的通话 ID(App 被杀后重新打开时,登录恢复后即可读取)。
no setter
syncName → SyncModule
no setter

Methods

answer(String callId) → Future<CallHandleImpl>
接听(长连接可用时 rtc.join,否则 POST /client/v1/calls/{call_id}/join),成功后连接媒体。
apply(EventFrame frame) → Future<void>
config() → JsonMap?
fetchActive({DRCancelToken? cancel}) → Future<ActiveCalls>
GET /client/v1/calls/active:本人正在进行的通话和正在振铃的来电。查询后与本地对齐(同同步), 本设备在通话中而还没有媒体连接的开始代发心跳、标为可以恢复。同步和回到前台时 SDK 自动调用;结果另经 activeResults 发出。
fetchCall(String callId) → Future<CallHandleImpl>
通话详情(rtc.get,长连接不可用时 GET /client/v1/calls/{call_id}),更新或建立本地的句柄。
forget(CallHandleImpl handle) → void
句柄结束后从表中去掉(快照不再变化)。
get(String callId) → Future<CallHandleImpl>
本地有的直接返回;没有的取详情(rtc.get)。
groupCall(String groupId) → Future<CallHandleImpl?>
groupCallBanner(String groupId) → JsonMap?
本地缓存的群通话横幅;null 为本地没有状态(没有进行中的群通话,或还不知道)。
heartbeat(String callId, JsonMap data) → Future<void>
心跳:经长连接 2 秒内没有回应或长连接不可用时用客户端 API。
history({String? cursor, int? limit}) → Future<DRPage<CallSummary>>
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
noteCurrent(String callId, bool inCall, {bool force = false}) → void
句柄报告本设备是否在这个通话中:在 meta 的 calls.current 中保存或清除(force 时不比较内存中的值)。
onLeader() → void
本地数据加载完、开始连接之前(Web SDK 的“成为主标签页”)。
inherited
onReload() → Future<void>
从本地存储重新加载内存中的数据。
inherited
onSignedIn(bool fresh) → Future<void>
登录或恢复登录、数据库已打开:从本地存储加载需要的数据。
override
onSignedOut() → void
退出、会话结束、切换用户:清除内存中的数据、释放列表。
override
provider(String kind) → MediaProviderAdapter?
registerProvider(MediaProviderAdapter adapter) → void
登记媒体适配(deeprespond_im_call 登记 LiveKit;同一种类后登记的替换先登记的,测试用)。
reject(String callId, {RejectReason reason = RejectReason.declined}) → Future<CallHandleImpl>
拒绝(长连接可用时 rtc.reject,否则 POST /client/v1/calls/{call_id}/reject);忙线时 reason 为 busy。
reportHolder(String callId, bool holding) → void
这个进程开始或停止持有一个通话的媒体连接:开始持有的停止代发心跳;断开而本人仍在通话中的开始代发。
resetSync() → void
清除内存中的状态(退出、切换用户)。
signal(String op, String path, JsonMap data, {String method = 'POST'}) → Future<JsonMap>
经长连接发出,不可用时用客户端 API(《sdk-web/2.功能概述文档》第 15 节)。 服务端不把本设备自己的接听、挂断等变化推给本设备:响应中的通话快照按通知同样处理(发出 call.changed)。
signalWithRetry(String op, String path, JsonMap data) → Future<JsonMap>
接听、拒绝、挂断、结束:rate_limited 的等待不超过 5 秒时自动重试一次。
start({String? toUser, String? toGroup, List<String>? usernames, required CallMedia media, Map<String, String>? ext}) → Future<CallHandleImpl>
sync(SyncRunContext ctx) → Future<void>
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited