Skip to content

Commit

Permalink
Merge pull request #198 from shiguredo/feature/fix-signaling-connect-…
Browse files Browse the repository at this point in the history
…custom-encode

SignalingConnect の `metadata`, `signaling_notify_metadata` が nil なのに送信データに {} が含まれる問題を修正
  • Loading branch information
zztkm authored Jul 17, 2024
2 parents 7691d17 + ac3b80e commit 1cececb
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
2 changes: 2 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
- CocoaPods 1.8 からソースリポジトリのデフォルトが `https://cdn.cocoapods.org/` になった
- https://blog.cocoapods.org/CocoaPods-1.8.0-beta/
- @zztkm
- [FIX] SignalingConnect の `metadata`, `signaling_notify_metadata` が nil の場合に {} として送信されてしまう問題を修正する
- @zztkm

## 2024.2.0

Expand Down
18 changes: 14 additions & 4 deletions Sora/Signaling.swift
Original file line number Diff line number Diff line change
Expand Up @@ -807,10 +807,20 @@ extension SignalingConnect: Codable {
try container.encodeIfPresent(clientId, forKey: .client_id)
try container.encodeIfPresent(bundleId, forKey: .bundle_id)
try container.encodeIfPresent(sdp, forKey: .sdp)
let metadataEnc = container.superEncoder(forKey: .metadata)
try metadata?.encode(to: metadataEnc)
let notifyEnc = container.superEncoder(forKey: .signaling_notify_metadata)
try notifyMetadata?.encode(to: notifyEnc)

// try metadata?.encode(to: metadataEnc) で metadata が nil の時はエンコードが実行されないように実装しても、
// container.superEncoder(forKey: .metadata) の呼び出し時点で子要素の準備までしてしまっているので
// metadata が nil の場合でも、`"metadata": {}` になってしまう。
// これを回避するために metadata が nil でない場合のみ、container.superEncoder(forKey: .metadata) を呼び出して
// encode(to:) を実行するような実装にしている。
if let metadata {
let metadataEnc = container.superEncoder(forKey: .metadata)
try metadata.encode(to: metadataEnc)
}
if let notifyMetadata {
let notifyEnc = container.superEncoder(forKey: .signaling_notify_metadata)
try notifyMetadata.encode(to: notifyEnc)
}
try container.encodeIfPresent(multistreamEnabled,
forKey: .multistream)
try container.encodeIfPresent(soraClient, forKey: .sora_client)
Expand Down

0 comments on commit 1cececb

Please sign in to comment.