# 転送フィルター

Sora Unity SDK の転送フィルター機能について説明します。

この機能を利用することで、音声や映像のフィルターをすることができます。

## Sora 2024.2.0 以降の Sora での利用について

Sora 2024.2.0 からルールだけでなくフィルターそのものを複数設定できるようになりました。

これまでの `ForwardingFilter` は非推奨になり、新たに `ForwardingFilters` が追加されました。

今後は `ForwardingFilters` を使用して転送フィルターを設定してください。

以下は `ForwardingFilters` を前提とした説明を記載しています。

## 転送フィルターについて

転送フィルターは `ForwardingFilters` クラスを使用して設定することができます。

このクラスは `ForwardingFilter` のリストになっており、複数の転送フィルターを設定が可能になっています。

転送フィルターの仕様の詳細については [Sora ドキュメントの転送フィルター機能](https://sora-doc.shiguredo.jp/FORWARDING_FILTER) を参照してください。

また、複数の転送フィルターの仕様については [Sora ドキュメントのマルチ転送フィルター機能](https://sora-doc.shiguredo.jp/MULTI_FORWARDING_FILTER) を参照してください。

Sora.cs で `ForwardingFilters` と `ForwardingFilter` クラスは以下のように定義されています。

```csharp
// 転送フィルターの設定を保持するクラス
public class ForwardingFilter
{
    public string? Action;
    public string? Name;
    public int? Priority;
    public class Rule
    {
        public string Field;
        public string Operator;
        public List<string> Values = new List<string>();
    }
    public List<List<Rule>> Rules = new List<List<Rule>>();
    public string? Version;
    public string? Metadata;
}
public class Config
{
    // ForwardingFilter 設定
    public ForwardingFilter ForwardingFilter;
    // ForwardingFilters 設定
    public List<ForwardingFilter> ForwardingFilters;
}
```

## 利用方法

転送フィルターの利用方法の例を以下に示します。

```csharp
var config = new Sora.Config();
// ForwardingFilters プロパティにフィルタリストを設定
config.ForwardingFilters = new List<Sora.ForwardingFilter>
{
    // フィルタ1: 特定の client-id (carol) を持つデータを許可
    new Sora.ForwardingFilter
    {
        // 許可アクション
        Action = Sora.ActionAllow,
        // フィルタの名前
        Name = "client-id-carol-allow",
        // 優先度
        Priority = 0,
        // フィルタのルール
        Rules = new List<List<Sora.ForwardingFilter.Rule>>
        {
            new List<Sora.ForwardingFilter.Rule>
            {
                new Sora.ForwardingFilter.Rule
                {
                    // 許可対象の client-id リスト
                    Field = Sora.FieldClientId,
                    Operator = Sora.OperatorIsIn,
                    Values = new List<string> { "carol" }
                }
            }
        },
        // フィルタのバージョン
        Version = "a",
        // メタデータ(JSON形式)
        Metadata = "{\"spam\":\"egg\"}"
    },
    // フィルタ2: audio と video データをフィルタ
    new Sora.ForwardingFilter
    {
        // Action / Name / Priority は未指定の場合はデフォルト値が設定される
        // フィルタのルール
        Rules = new List<List<Sora.ForwardingFilter.Rule>>
        {
            new List<Sora.ForwardingFilter.Rule>
            {
                new Sora.ForwardingFilter.Rule
                {
                    Field = Sora.FieldKind,
                    Operator = Sora.OperatorIsIn,
                    Values = new List<string> { "audio", "video" }
                }
            },
        },
    }
};
```
