API SignalR

SignalR

 

O componente SignalR usa WebSocket como transporte para conectar a um servidor SignalR; se este transporte não for suportado, um erro será gerado.

O componente cliente SignalR tem uma propriedade chamada SignalR onde você pode definir os seguintes dados:

 

 

O cliente suporta o envio de dados Text ou Binary.

 

 

Mensagens de Hubs

 

A Hubs API torna possível invocar métodos do servidor a partir do cliente e métodos do cliente a partir do servidor. O protocolo utilizado para conexão persistente não é rico o suficiente para permitir expressar a semântica de RPC (remote procedure call). Isso não significa, no entanto, que o protocolo utilizado para conexões de hub seja completamente diferente do protocolo utilizado para conexões persistentes. Em vez disso, o protocolo utilizado para conexões de hub é, em sua maior parte, uma extensão do protocolo para conexões persistentes.

 

Quando um cliente invoca um método do servidor, ele não envia mais uma string de fluxo livre como era o caso para conexões persistentes. Em vez disso, ele envia uma string JSON contendo todas as informações necessárias para invocar o método. Aqui está um exemplo de mensagem que um cliente enviaria para invocar um método do servidor:

 


WriteData('{"H":"chathub","M":"Send","A":["Delphi Client","Test message"],"I":0}');

 

O payload possui as seguintes propriedades:

I – identificador de invocação – permite que você associe respostas com requisições

H – o nome do hub

M – o nome do método

A – arguments (um array, pode estar vazio se o método não tiver nenhum parâmetro)

 

 

Se o argumento string tiver aspas duplas, substitua " por \"

 

Exemplo: se o argumento é {"test":1}, envie o argumento como {\"test\":1}

 

WriteData('{"H":"chathub","M":"Send","A":["{\"test\":1}"],"I":0}');

 

Autorização

A autenticação pode ser habilitada para associar um usuário a cada conexão e filtrar quais usuários podem acessar recursos. A autenticação é implementada utilizando Bearer Tokens: o cliente fornece um access token e o servidor valida este token e o utiliza para identificar o usuário.

 

Atualmente, apenas Bearer Tokens são suportados:

 

Aqui, você passa o token diretamente ao servidor Signal (porque o token foi obtido de outro servidor).

 

 

 


oSignalR := TsgcWSAPI_Signal.Create(nil);
oSignalR.SignalR.Enabled := True;
oSignalR.SignalR.Authentication := srcBearerToken;
oSignalR.SignalR.BearerToken.Token := 'token here';

O componente tem os seguintes eventos:

 

OnSignalRConnect

Este evento é gerado quando o cliente se conecta com sucesso ao servidor.

 

OnSignalRDisconnect

Este evento é gerado quando o cliente é desconectado do servidor.

 

OnSignalRError

Este evento é chamado quando há um erro na conexão WebSocket.

 

OnSignalRMessage

O protocolo utilizado para a conexão persistente é bastante simples. As mensagens enviadas ao servidor são apenas strings brutas. Não há um formato específico em que elas devam estar. As mensagens enviadas ao cliente são mais estruturadas. As propriedades que você pode encontrar na mensagem são as seguintes:

 

C – id da mensagem, presente em todas as mensagens que não são KeepAlive

M – um array contendo os dados reais.

 


{"C":"d-9B7A6976-B,2|C,2","M":["Welcome!"]}

 

OnSignalRBinary

Este evento é chamado quando dados binários são recebidos do servidor.

 

OnSignalRResult

Quando um método do servidor é invocado, o servidor retorna uma confirmação de que a invocação foi concluída enviando o id da invocação ao cliente e — se o método retornou um valor — o valor de retorno, ou — se a invocação do método falhou — o erro.

Aqui estão exemplos de resultados de uma chamada de método do servidor:

 


{"I":"0"}

 

Um método void do servidor cujo identificador de invocação era "0" foi concluído com sucesso.

 


{"I":"0", "R":42}

 

Um método de servidor que retorna um número cujo identificador de invocação era "0" foi concluído com sucesso e retornou o valor 42.

 


{"I":"0", "E":"Error occurred"}

 

OnSignalRKeepAlive

Este evento é gerado quando uma mensagem KeepAlive é recebida do servidor.