TsgcWSPServer_sgc › Propriedades › UseMatchesMask
Habilita a correspondência de nomes de canal no estilo máscara, em vez de uma correspondência exata de string.
property UseMatchesMask: Boolean read FUseMatchesMask write FUseMatchesMask;
False
UseMatchesMask é uma propriedade somente em tempo de execução (runtime-only), não é publicada (published) no Object Inspector, portanto só pode ser definida em código. Ela é public, não published.
Por padrão, um argumento de canal (em Subscribe, Broadcast, Publish, ...) é comparado com as inscrições de uma conexão por meio de uma comparação exata de string. Quando UseMatchesMask é True, o servidor passa a expandir o argumento de canal como uma máscara do Delphi (System.Masks.MatchesMask: wildcards * e ?, além de conjuntos de caracteres como [abc]) em relação ao conjunto de nomes de canal que atualmente têm ao menos um assinante ativo. Se a máscara não corresponder a nenhum canal ativo, o argumento é utilizado como um nome de canal literal.
UseMatchesMask não é uma correspondência de filtro de tópico MQTT. # e + não têm significado especial, e * corresponde a / como qualquer outro caractere, não existe o conceito de segmento de caminho. Para wildcards compatíveis com MQTT, utilize TsgcWSPClient_MQTT / TsgcWSPServer_MQTT.
Esta opção é mais útil no lado da publicação, para distribuir uma mensagem para todos os canais que correspondem a um padrão no momento:
oProtocol.Broadcast('payload', 'topic1/*');
Tem utilidade limitada no lado da inscrição: um cliente que envia Subscribe('topic1/*') antes de qualquer canal concreto topic1/... ter um assinante fica simplesmente inscrito no nome de canal literal topic1/*, já que ainda não há nada para a máscara expandir.
// 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/*');