SoraHandlers

public final class SoraHandlers

Sora オブジェクトのイベントハンドラです。

呼び出し元のスレッドは保証されない。UI 更新や共有状態の変更は main queue / main actor へ 束ねること。

配送のたびにプロパティを読むため、接続の途中で設定を変更しても次の配送から反映される (プロパティの読み書きを排他する lock は無く、並行する設定変更はデータ競合になる)。

Swift 6 言語モードで @MainActor の文脈からハンドラーを設定する場合は、クロージャに @Sendable を付けるか nonisolated な関数へ処理を分離して隔離を外す。MediaChannel と RTCAudioSession は Sendable ではないため、main actor へ渡す場合は nonisolated(unsafe) let で運び、Task { @MainActor in ... } で main actor 上へ移す (AVAudioSession.RouteChangeReason と AVAudioSessionRouteDescription は Sendable のため そのまま渡せる)。

イベントを actor / Task から購読する場合は Sora.subscribeEvents(bufferingPolicy:) を使う (接続ごとのイベントは MediaChannel.subscribeEvents(bufferingPolicy:))。新しい購読 API は、 この handler と同じ配送点から対応するイベントを配送する。

  • 接続成功時に呼ばれるクロージャー

    Declaration

    Swift

    public var onConnect: ((MediaChannel?, Error?) -> Void)?
  • 接続解除時に呼ばれるクロージャー

    Declaration

    Swift

    public var onDisconnect: ((MediaChannel, Error?) -> Void)?
  • メディアチャネルが追加されたときに呼ばれるクロージャー

    Declaration

    Swift

    public var onAddMediaChannel: ((MediaChannel) -> Void)?
  • メディアチャネルが除去されたときに呼ばれるクロージャー

    Declaration

    Swift

    public var onRemoveMediaChannel: ((MediaChannel) -> Void)?
  • 音声入出力ルートが変更されたときに呼ばれるクロージャー

    Declaration

    Swift

    public var onChangeAudioRoute: ((RTCAudioSession, AVAudioSession.RouteChangeReason, AVAudioSessionRouteDescription) -> Void)?

    Parameters

    session

    変更通知元の RTCAudioSession

    reason

    変更理由

    previousRoute

    変更前のルート情報

  • 初期化します。

    Declaration

    Swift

    public init()