TsgcWSPServer_sgc › Proprietà › UseMatchesMask

UseMatchesMask Proprietà

Abilita la corrispondenza dei nomi canale in stile maschera anziché una corrispondenza esatta della stringa.

Sintassi

property UseMatchesMask: Boolean read FUseMatchesMask write FUseMatchesMask;

Valore predefinito

False

Note

UseMatchesMask è una proprietà disponibile solo a runtime, non è pubblicata nell'Object Inspector, quindi può essere impostata solo nel codice. È public, non published.

Per impostazione predefinita un argomento channel (in Subscribe, Broadcast, Publish, ...) viene confrontato con le sottoscrizioni di una connessione tramite un confronto esatto della stringa. Quando UseMatchesMask è True, il server espande invece l'argomento channel come una maschera Delphi (System.Masks.MatchesMask: wildcard * e ?, oltre a insiemi di caratteri come [abc]) rispetto all'insieme dei nomi canale che al momento hanno almeno un sottoscrittore attivo. Se la maschera non corrisponde ad alcun canale attivo, l'argomento viene utilizzato come nome di canale letterale.

UseMatchesMask non è la corrispondenza dei topic filter MQTT. # e + non hanno alcun significato speciale e * corrisponde anche attraverso / come qualsiasi altro carattere, non esiste un concetto di segmento di percorso. Per wildcard conformi a MQTT utilizzare invece TsgcWSPClient_MQTT / TsgcWSPServer_MQTT.

Questa opzione è particolarmente utile sul lato publish, per distribuire un messaggio a tutti i canali attualmente corrispondenti a un pattern:

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

È di utilità limitata sul lato subscribe: un client che invia Subscribe('topic1/*') prima che esista un canale concreto topic1/... con un sottoscrittore viene semplicemente iscritto al nome di canale letterale topic1/*, poiché non c'è ancora nulla rispetto a cui la maschera possa espandersi.

Esempio

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

Torna alle Proprietà