TsgcWSPServer_sgc › Eigenschappen › UseMatchesMask
Schakelt vergelijking van kanaalnamen met een masker in, in plaats van een exacte tekenreeksvergelijking.
property UseMatchesMask: Boolean read FUseMatchesMask write FUseMatchesMask;
False
UseMatchesMask is een eigenschap die alleen tijdens runtime bestaat: ze wordt niet in de Object Inspector gepubliceerd en kan dus alleen in code worden ingesteld. Ze is public, niet published.
Standaard wordt een kanaalargument (in Subscribe, Broadcast, Publish, ...) vergeleken met de abonnementen van een verbinding via een exacte tekenreeksvergelijking. Wanneer UseMatchesMask True is, breidt de server het kanaalargument in plaats daarvan uit als een Delphi-masker (System.Masks.MatchesMask: jokertekens * en ?, plus tekensets zoals [abc]) ten opzichte van de verzameling kanaalnamen die op dat moment minstens één actieve abonnee hebben. Als het masker met geen enkel actief kanaal overeenkomt, wordt het argument gebruikt als een letterlijke kanaalnaam.
UseMatchesMask is geen MQTT-topicfiltervergelijking. # en + hebben geen speciale betekenis, en * komt net als elk ander teken ook overeen met /, er bestaat geen concept van padsegmenten. Gebruik voor MQTT-conforme jokertekens in plaats daarvan TsgcWSPClient_MQTT / TsgcWSPServer_MQTT.
Deze optie is het nuttigst aan de publish-kant, om een bericht te verspreiden naar elk kanaal dat op dat moment met een patroon overeenkomt:
oProtocol.Broadcast('payload', 'topic1/*');
Aan de subscribe-kant is het nut beperkt: een client die Subscribe('topic1/*') verstuurt voordat een concreet topic1/...-kanaal een abonnee heeft, wordt gewoon geabonneerd op de letterlijke kanaalnaam topic1/*, omdat er nog niets is waartegen het masker kan worden uitgebreid.
// 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/*');