TsgcWSPServer_sgc › プロパティ › UseMatchesMask
完全一致文字列の代わりに、マスク形式でチャンネル名を照合できるようにします。
property UseMatchesMask: Boolean read FUseMatchesMask write FUseMatchesMask;
False
UseMatchesMask はランタイム専用のプロパティであり、オブジェクトインスペクタには公開されていないため、コード内でのみ設定できます。published ではなく public です。
デフォルトでは、チャンネル引数(Subscribe、Broadcast、Publish など)は、接続のサブスクリプションに対して完全一致文字列比較で照合されます。UseMatchesMask が True の場合、サーバーは代わりにチャンネル引数を Delphi マスク(System.Masks.MatchesMask:* と ? のワイルドカード、および [abc] のような文字セット)として展開し、現在少なくとも1つのライブサブスクライバーを持つチャンネル名の集合と照合します。マスクがどのライブチャンネルにも一致しない場合、引数はリテラルなチャンネル名として使用されます。
UseMatchesMask は MQTT のトピックフィルターマッチングではありません。# と + に特別な意味はなく、* は他の文字と同様に / をまたいで一致します。パスセグメントという概念はありません。MQTT 準拠のワイルドカードが必要な場合は、代わりに TsgcWSPClient_MQTT / TsgcWSPServer_MQTT を使用してください。
このオプションは、現在パターンに一致するすべてのチャンネルにメッセージをファンアウトするために、パブリッシュ側で最も有用です。
oProtocol.Broadcast('payload', 'topic1/*');
サブスクライブ側での用途は限定的です。具体的な topic1/... チャンネルにまだサブスクライバーがいない状態で Subscribe('topic1/*') を送信するクライアントは、マスクを展開する対象がまだ存在しないため、単にリテラルなチャンネル名 topic1/* にサブスクライブされるだけです。
// server side, enable mask matching for this protocol instance
sgcWSPServer_sgc1.UseMatchesMask := True;
// clients subscribe to concrete channel names
// sgcWSPClient_sgc1.Subscribe('topic1/a');
// sgcWSPClient_sgc2.Subscribe('topic1/b');
// publish once, delivered to every live channel matching the mask
sgcWSPServer_sgc1.Broadcast('payload', 'topic1/*');