11import Foundation
22
3+ /// RPC メソッドを定義するためのプロトコル
4+ ///
5+ /// 新しい RPC メソッドを SDK に追加する場合は、このプロトコルに準拠した型を定義してください。
6+ ///
7+ /// - Note: 通常のユーザーは、このプロトコルを直接実装する必要はありません
38public protocol RPCMethodProtocol {
9+ /// RPC メソッドのパラメータ型
410 associatedtype Params : Encodable
11+ /// RPC メソッドの戻り値型
512 associatedtype Result : Decodable
13+ /// RPC メソッド名 (例: "2025.2.0/RequestSimulcastRid")
614 static var name : String { get }
715}
816
@@ -143,35 +151,72 @@ public struct ResetSpotlightRidResult: Decodable {
143151 }
144152}
145153
146- // NOTE: Sora の RPC メソッドを表す以下の型の命名について
147- //
148- // `2025.2.0/RequestSpotlightRid` と `2027.2.0/RequestSpotlightRid` のようにバージョン部分だけ
149- // 違うメソッド名が増えた場合には、`RequestSimulcastRid_2025_2_0` のようにバージョン名を含む
150- // 命名規則に移行する予定 (どういう命名規則にするかはそのとき決定する)。
151- //
152- // 移行方法
153- // - 既存で提供している型のエイリアスを新しい命名規則で作成する
154- // - 既存の型は deprecated にして、バージョン名を含む命名規則を適用した型への移行を促す
155- // - 新規追加されたメソッドはバージョン名を含む命名規則で追加する
154+ // MARK: - RPC メソッド型の命名規則について
156155
156+ /// # RPC メソッド型の命名規則
157+ ///
158+ /// ## 現在の命名規則
159+ /// 現在、RPC メソッド型は `RequestSimulcastRid`、`RequestSpotlightRid` のようにメソッド名のみで命名しています。
160+ /// メソッド名のバージョン情報(例:`2025.2.0`)は、型の `name` プロパティに格納されています。
161+ ///
162+ /// ```swift
163+ /// public enum RequestSimulcastRid: RPCMethodProtocol {
164+ /// public static let name = "2025.2.0/RequestSimulcastRid"
165+ /// }
166+ /// ```
167+ ///
168+ /// ## 将来の命名規則への移行計画
169+ /// 同じメソッド名でバージョンが異なる場合(例:`2025.2.0/RequestSpotlightRid` と `2027.2.0/RequestSpotlightRid`)が増えた際には、
170+ /// バージョン情報を型名に含める新しい命名規則に移行する予定です。
171+ ///
172+ /// ### 新しい命名規則の例
173+ /// ```swift
174+ /// // 新しい命名規則の例(将来のバージョン)
175+ /// public enum RequestSpotlightRid_2025_2_0: RPCMethodProtocol { ... }
176+ /// public enum RequestSpotlightRid_2027_2_0: RPCMethodProtocol { ... }
177+ /// ```
178+ ///
179+ /// ## 移行時のアプローチ
180+ /// 1. **既存の型はエイリアスを作成**
181+ /// - 既存の型は新しい命名規則の型のエイリアスとして提供します
182+ /// 2. **deprecated マーク**
183+ /// - 既存の型を `@deprecated` マークし、ユーザーに移行を促します
184+ /// 3. **新規メソッドは新しい命名規則で追加**
185+ /// - 将来追加されるメソッドは新しい命名規則で定義します
186+ ///
187+ /// このアプローチにより、既存コードとの互換性を保ちながら、スムーズに移行できるようにしています。
188+
189+ /// サイマルキャスト の rid をリクエストする RPC メソッド
190+ ///
191+ /// 視聴するサイマルキャスト映像の解像度を指定する RPC メソッドです。
157192public enum RequestSimulcastRid : RPCMethodProtocol {
158193 public typealias Params = RequestSimulcastRidParams
159194 public typealias Result = RequestSimulcastRidResult
160195 public static let name = " 2025.2.0/RequestSimulcastRid "
161196}
162197
198+ /// スポットライト rid をリクエストする RPC メソッド
199+ ///
200+ /// スポットライト機能で注目する接続を指定する RPC メソッドです。
163201public enum RequestSpotlightRid : RPCMethodProtocol {
164202 public typealias Params = RequestSpotlightRidParams
165203 public typealias Result = RequestSpotlightRidResult
166204 public static let name = " 2025.2.0/RequestSpotlightRid "
167205}
168206
207+ /// スポットライト rid をリセットする RPC メソッド
208+ ///
209+ /// スポットライト機能の設定をリセットする RPC メソッドです。
169210public enum ResetSpotlightRid : RPCMethodProtocol {
170211 public typealias Params = ResetSpotlightRidParams
171212 public typealias Result = ResetSpotlightRidResult
172213 public static let name = " 2025.2.0/ResetSpotlightRid "
173214}
174215
216+ /// シグナリング通知メタデータを設定する RPC メソッド
217+ ///
218+ /// シグナリング通知全体にメタデータを設定する RPC メソッドです。
219+ /// ジェネリック型パラメータで任意の型のメタデータを指定できます。
175220public enum PutSignalingNotifyMetadata < Metadata: Codable > : RPCMethodProtocol {
176221 public typealias Params = PutSignalingNotifyMetadataParams < Metadata >
177222 public typealias Result = Metadata
@@ -180,6 +225,10 @@ public enum PutSignalingNotifyMetadata<Metadata: Codable>: RPCMethodProtocol {
180225 }
181226}
182227
228+ /// シグナリング通知メタデータのアイテムを設定する RPC メソッド
229+ ///
230+ /// シグナリング通知メタデータの特定キーに値を設定する RPC メソッドです。
231+ /// ジェネリック型パラメータで値の型とレスポンスの型を指定できます。
183232public enum PutSignalingNotifyMetadataItem < Metadata: Decodable , Value: Encodable > :
184233 RPCMethodProtocol
185234{
@@ -190,7 +239,21 @@ public enum PutSignalingNotifyMetadataItem<Metadata: Decodable, Value: Encodable
190239 }
191240}
192241
193- /// RPC メソッドを表す Enum
242+ /// RPC メソッドを型安全に表現する Enum
243+ ///
244+ /// MediaChannel.rpcMethods で利用可能なメソッドをこの型として取得できます。
245+ /// このEnum を使用することで、コンパイル時にメソッド名の妥当性が検証されます。
246+ ///
247+ /// # 使用例
248+ /// ```swift
249+ /// if mediaChannel.rpcMethods.contains(.requestSimulcastRid) {
250+ /// let params = RequestSimulcastRidParams(rid: "r0")
251+ /// let response = try await mediaChannel.rpc(
252+ /// method: RequestSimulcastRid.self,
253+ /// params: params
254+ /// )
255+ /// }
256+ /// ```
194257public enum RPCMethod {
195258 case requestSimulcastRid
196259 case requestSpotlightRid
@@ -207,8 +270,10 @@ public enum RPCMethod {
207270 case . resetSpotlightRid:
208271 return ResetSpotlightRid . name
209272 case . putSignalingNotifyMetadata:
273+ // NOTE: ジェネリック型のメソッド名取得のため、ダミー型引数 <String> を使用
210274 return PutSignalingNotifyMetadata< String> . name
211275 case . putSignalingNotifyMetadataItem:
276+ // NOTE: ジェネリック型のメソッド名取得のため、ダミー型引数 <String, String> を使用
212277 return PutSignalingNotifyMetadataItem < String , String > . name
213278 }
214279 }
0 commit comments