CallsService constructor

CallsService(
  1. Core core,
  2. JsonMap? _config()
)

Implementation

CallsService(this.core, this._config) : log = core.moduleLog('calls') {
  // 后台客户端经端口转发的调用(《3.接口设计》第 8 节):返回可以跨 isolate 传递的普通 JSON
  core.handle('calls.get', (args) async => cloneMap((await fetchCall('${args[0]}')).snapshot.call.raw));
  core.handle('calls.answer', (args) async => cloneMap((await answer('${args[0]}')).snapshot.call.raw));
  core.handle('calls.reject', (args) async {
    final reason = args.length > 1 && args[1] == RejectReason.busy.name ? RejectReason.busy : RejectReason.declined;
    return cloneMap((await reject('${args[0]}', reason: reason)).snapshot.call.raw);
  });
  // App 回到前台时取一次 calls/active(《2.功能概述文档》第 2、8.3 节):结果经 [activeResults] 交给来电包清除残留的来电
  core.foregroundHooks.add(() {
    if (core.signedIn) fireAndForget(fetchActive(), (e) => log.debug('回到前台查询通话失败', code: e is DRException ? e.code : e.runtimeType.toString()));
  });
}