TsgcWSPServer_sgc › Eigenschaften › UseMatchesMask

UseMatchesMask Eigenschaft

Aktiviert den Wildcard-Abgleich von Kanalnamen anstelle eines exakten String-Abgleichs.

Syntax

property UseMatchesMask: Boolean read FUseMatchesMask write FUseMatchesMask;

Standardwert

False

Hinweise

UseMatchesMask ist eine reine Laufzeiteigenschaft, sie wird nicht im Object Inspector veröffentlicht und kann daher nur im Code gesetzt werden. Sie ist public, nicht published.

Standardmäßig wird ein Kanalargument (in Subscribe, Broadcast, Publish, ...) mit den Abonnements einer Verbindung per exaktem String-Vergleich abgeglichen. Wenn UseMatchesMask auf True gesetzt ist, erweitert der Server das Kanalargument stattdessen als Delphi-Mask (System.Masks.MatchesMask: Wildcards * und ?, sowie Zeichenmengen wie [abc]) gegen die Menge der Kanalnamen, die aktuell mindestens einen aktiven Abonnenten haben. Trifft die Mask auf keinen aktiven Kanal zu, wird das Argument als literaler Kanalname verwendet.

UseMatchesMask ist kein MQTT-Themenfilter-Abgleich. # und + haben keine besondere Bedeutung, und * trifft wie jedes andere Zeichen auch über / hinweg zu, es gibt kein Konzept von Pfadsegmenten. Für MQTT-konforme Wildcards verwenden Sie stattdessen TsgcWSPClient_MQTT / TsgcWSPServer_MQTT.

Diese Option ist vor allem auf der Publish-Seite nützlich, um eine Nachricht an jeden aktuell zu einem Muster passenden Kanal zu verteilen:

oProtocol.Broadcast('payload', 'topic1/*');

Auf der Subscribe-Seite ist der Nutzen begrenzt: Ein Client, der Subscribe('topic1/*') sendet, bevor irgendein konkreter topic1/...-Kanal einen Abonnenten hat, wird schlicht auf den literalen Kanalnamen topic1/* abonniert, da es noch nichts gibt, gegen das die Mask erweitert werden könnte.

Beispiel

// 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/*');

Zurück zu Properties