Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Informações
icontrue
titleObservações
    • A classe suporta atualmente um conjunto de mensagens preestabelecidas, sendo possivel utilizar para comunicação com outros produtos atraves do protocolo GPRC, desde que utilizem as mesmas mensagens suportadas.

Exemplos

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
user function Example(aResult)

ogRPC := tGrpc():New("smartlink.proto", "localhost",5001)

  if ogRPC:isRunning()
conout("Server is online")
else
conout(ogRPC:ErrorDesc())
return
endif

ogRPC:ClientInfoProp := '{"dummy.json":{"clientproperties":[{"prop01": false}]}}'
if ogRPC:clientSetup()
conout(ogRPC:ErrorDesc())
endif

ogRPC:ClientInfoProp := '{"dummy.json":{"clientproperties":[{"prop01": true}]}}'
if(ogRPC:clientSetup() == .F.)
conout(ogRPC:ErrorDesc())
endif

ogRPC:ClientInfoProp := "e4vddea4-baba-4c9a-b772-gh77a5fce789"
if (ogRPC:tenantSetup() == .F.)
conout(ogRPC:ErrorDesc())
endif
ogRPC:ClientInfoProp := "e4vddea4-baba-4c9a-b772-gh77a5fce789"
if (ogRPC:tenantUndo() == .F.)
conout(ogRPC:ErrorDesc())
endif

oGRPC:MsgId := "idval"
oGRPC:MsgType := "C"
oGRPC:MsgContent := "mensagem enviada do client para o server"
oGRPC:MsgAud := "audience"
oGRPC:MsgDeliveryTag := 0

if ogRPC:sendMessage()
conout("Mensagem enviada com sucesso")
else
conout(ogRPC:ErrorDesc())
endif

conout(ogRPC:waitForMessages())

if(ogRPC:MsgContent = "mensagem enviada do client para o server")
conout("erro, nao veio informacao do servidor")
else
oGRPC:MsgAckDeliveryTag := 1
ogRPC:MsgAck := .T.
ogRPC:ackMessage()
conout("waitForMessages ok!")
endif



return

Abrangência

20.3.0.5 em diante


HTML
<table border='1' width='100%'><tr bgcolor='#ccccff'><td colspan='2'><font size='+2'><b>Propriedades</b></font></td></tr><tr><td valign='top' align='right'><font face='monospace'>caractere</font></td>
<td valign='top' width='100%'><font face='monospace'><b>ClientInfoProp</b></font><table width='100%'><tr><td>          </td><td width='100%'>Setar o conteudo da propriedade client para envio da mensagem<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>caractere</font></td>
<td valign='top' width='100%'><font face='monospace'><b>MsgId</b></font><table width='100%'><tr><td>          </td><td width='100%'>Indica um ID para a mensagem<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>caractere</font></td>
<td valign='top' width='100%'><font face='monospace'><b>MsgType</b></font><table width='100%'><tr><td>          </td><td width='100%'>Indica o tipo da mensagem<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>caractere</font></td>
<td valign='top' width='100%'><font face='monospace'><b>MsgContent</b></font><table width='100%'><tr><td>          </td><td width='100%'>Conteudo da mensagem<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>caractere</font></td>
<td valign='top' width='100%'><font face='monospace'><b>MsgAud</b></font><table width='100%'><tr><td>          </td><td width='100%'>Conteudo para auditoria<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>numérico</font></td>
<td valign='top' width='100%'><font face='monospace'><b>MsgDeliveryTag</b></font><table width='100%'><tr><td>          </td><td width='100%'>Indica uma flag de entrega da mensagem<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>numérico</font></td>
<td valign='top' width='100%'><font face='monospace'><b>MsgAckDeliveryTag</b></font><table width='100%'><tr><td>          </td><td width='100%'>Seta a flag de entrega da mensagem no conhecimento de recebimento (metodo AckMessage)<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>numérico</font></td>
<td valign='top' width='100%'><font face='monospace'><b>MsgAck</b></font><table width='100%'><tr><td>          </td><td width='100%'>Seta a flag do metodo AckMessage<br />
</td></tr></table>
</td></tr>
</table>
<br />
<table border='1' width='100%'><tr bgcolor='#ccccff'><td colspan='2'><font size='+2'><b>Resumo dos Métodos</b></font></td></tr><tr><td valign='top' align='right'><font face='monospace'>lógico</font></td>
<td valign='top' width='100%'><font face='monospace'><b><a href='#isrunning()'>isRunning</a></b>()</font><table width='100%'><tr><td>          </td><td width='100%'>Retorna verdadeiro (TRUE) se o gRPC Server esta rodando corretamente. Em caso de erro retorna FALSE, consultar ErrorCode() e ErrorDesc()<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>lógico</font></td>
<td valign='top' width='100%'><font face='monospace'><b><a href='#clientsetup()'>clientSetup</a></b>()</font><table width='100%'><tr><td>          </td><td width='100%'>Retorna verdadeiro (TRUE) se a configuração funcionou no gRPC Server corretamente. Em caso de erro retorna FALSE, consultar ErrorCode() e ErrorDesc()<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>lógico</font></td>
<td valign='top' width='100%'><font face='monospace'><b><a href='#tenantsetup()'>tenantSetup</a></b>()</font><table width='100%'><tr><td>          </td><td width='100%'>Retorna verdadeiro (TRUE) se a configuração funcionou no gRPC Server corretamente. Em caso de erro retorna FALSE, consultar ErrorCode() e ErrorDesc()<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>lógico</font></td>
<td valign='top' width='100%'><font face='monospace'><b><a href='#tenantundo()'>tenantUndo</a></b>()</font><table width='100%'><tr><td>          </td><td width='100%'>Retorna verdadeiro (TRUE) se a configuração funcionou no gRPC Server corretamente. Em caso de erro retorna FALSE, consultar ErrorCode() e ErrorDesc()<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>lógico</font></td>
<td valign='top' width='100%'><font face='monospace'><b><a href='#sendmessages()'>sendMessages</a></b>()</font><table width='100%'><tr><td>          </td><td width='100%'>Retorna verdadeiro (TRUE) se a mensagem foi enviada com sucesso ao gRPC Server corretamente. Em caso de erro retorna FALSE, consultar ErrorCode() e ErrorDesc()<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>caractere</font></td>
<td valign='top' width='100%'><font face='monospace'><b><a href='#waitformessages()'>waitForMessages</a></b>()</font><table width='100%'><tr><td>          </td><td width='100%'>Retorna o conteudo da mensagem (tambem setada em :MsgContent) se a mensagem foi recebida com sucesso ao gRPC Server corretamente. Em caso de erro não altera o conteudo da :MsgContent, e pode ser consultado ErrorCode() e ErrorDesc()<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>lógico</font></td>
<td valign='top' width='100%'><font face='monospace'><b><a href='#ackmessage()'>ackMessage</a></b>()</font><table width='100%'><tr><td>          </td><td width='100%'>Retorna o conteudo da mensagem (tambem setada em :MsgContent) se a mensagem foi recebida com sucesso ao gRPC Server corretamente. Em caso de erro não altera o conteudo da :MsgContent, e pode ser consultado ErrorCode() e ErrorDesc()<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>numérico</font></td>
<td valign='top' width='100%'><font face='monospace'><b><a href='#errorcode()'>ErrorCode</a></b>()</font><table width='100%'><tr><td>          </td><td width='100%'>Codigo de erro (obs: erros 100 são internos)<br />
</td></tr></table>
</td></tr>
<tr><td valign='top' align='right'><font face='monospace'>caractere</font></td>
<td valign='top' width='100%'><font face='monospace'><b><a href='#errordesc()'>ErrorDesc</a></b>()</font><table width='100%'><tr><td>          </td><td width='100%'>Descricao do erro<br />
</td></tr></table>
</td></tr>
</table>
<br />
<table border='1' width='100%'><tr bgcolor='#ccccff'><td><font size='+2'><b>Detalhes dos Métodos</b></font></td></tr></table>

<a name='New()'><!-- --></a><p><b>New</b></p><dl><dt><font face='monospace'>Objeto - <b>New</b>()</p>
</font></dt><dd><p>Cria um objeto tGrpc com um servidor pelo protocolo gRPC no modelo do arquivo .proto informado. Atualmente, aceita o modelo Smartlink, predeterminado pela TOTVS.</p>
<dl><dt><b>Retorno:</b></dt>
<dd><font face='monospace'>objeto lRet</font> - retorna o objeto da classe</dd>
</dl><dl><dt><b>Exemplos:</b></dt>Local oClient := tGrpc():New("smartlink.proto","localhost",5001)<br />
</font></dd></dl></dd></dl><hr />

 <a name='isrunning()'><!-- --></a><p><b>isRunning</b></p><dl><dt><font face='monospace'>lógico - <b>isRunning</b>()</p>
</font></dt><dd><p>Checa se o gRPC Server esta rodando corretamente.</p>
<dl><dt><b>Retorno:</b></dt>
<dd><font face='monospace'>lógico lRet</font> - Retorna verdadeiro (TRUE) se o gRPC Server esta rodando corretamente. Em caso de erro retorna FALSE, consultar ErrorCode() e ErrorDesc()</dd>
</dl><dl><dt><b>Exemplos:</b></dt>if ogRPC:isRunning()<br />
conout("Server is online")<br />
else<br />
conout(ogRPC:ErrorDesc())<br />
endif<br /><br />
   <br />
</font></dd></dl></dd></dl><hr />
<a name='clientsetup()'><!-- --></a><p><b>clientSetup</b></p><dl><dt><font face='monospace'>lógico - <b>clientSetup</b>()</p>
</font></dt><dd><p>Configura um client no servidor</p>
<dl><dt><b>Retorno:</b></dt>
<dd><font face='monospace'>lógico lRet</font> - Retorna verdadeiro (TRUE) se a configuração funcionou no gRPC Server corretamente. Em caso de erro retorna FALSE, consultar ErrorCode() e ErrorDesc()</dd>
</dl><dl><dt><b>Exemplos:</b></dt>
<dd>[code]<br />
ogRPC:ClientInfoProp = '{"dummy.json":{"clientproperties":[{"prop01": false}]}}'<br />
if ogRPC:clientSetup()<br />
conout(ogRPC:ErrorDesc())<br />
endif<br />

<br />
ogRPC:ClientInfoProp = '{"dummy.json":{"clientproperties":[{"prop01": true}]}}'<br />
if ogRPC:clientSetup()<br />
conout("configuração realizada com sucesso")<br />
endif<br />
[code]<br />
</font></dd></dl></dd></dl><hr />
<a name='tenantsetup()'><!-- --></a><p><b>tenantSetup</b></p><dl><dt><font face='monospace'>lógico - <b>tenantSetup</b>()</p>
</font></dt><dd><p>Configura um um grupo ou entidade de recursos no servidor gRPC</p>
<dl><dt><b>Retorno:</b></dt>
<dd><font face='monospace'>lógico lRet</font> - Retorna verdadeiro (TRUE) se a configuração funcionou no gRPC Server corretamente. Em caso de erro retorna FALSE, consultar ErrorCode() e ErrorDesc()</dd>
</dl><dl><dt><b>Exemplos:</b></dt>
<dd>[code]<br />
ogRPC:ClientInfoProp := "e4vddea4-baba-4c9a-b772-gh77a5fce789"<br />
if ogRPC:tenantSetup()<br />
conout(ogRPC:ErrorDesc())<br />
endif<br />
[code]<br />
</font></dd></dl></dd></dl><hr />
<a name='tenantundo()'><!-- --></a><p><b>tenantUndo</b></p><dl><dt><font face='monospace'>lógico - <b>tenantUndo</b>()</p>
</font></dt><dd><p>Desfaz a configuração um um grupo ou entidade de recursos no servidor gRPC</p>
<dl><dt><b>Retorno:</b></dt>
<dd><font face='monospace'>lógico lRet</font> - Retorna verdadeiro (TRUE) se a configuração funcionou no gRPC Server corretamente. Em caso de erro retorna FALSE, consultar ErrorCode() e ErrorDesc()</dd>
</dl><dl><dt><b>Exemplos:</b></dt>
<dd>[code]<br />
ogRPC:ClientInfoProp := "e4vddea4-baba-4c9a-b772-gh77a5fce789"<br />
if ogRPC:tenantUndo()<br />
conout(ogRPC:ErrorDesc())<br />
endif<br />
[code]<br />
</font></dd></dl></dd></dl><hr />
<a name='sendmessages()'><!-- --></a><p><b>sendMessages</b></p><dl><dt><font face='monospace'>lógico - <b>sendMessages</b>()</p>
</font></dt><dd><p>Envia uma mensagem do client para o servidor</p>
<dl><dt><b>Retorno:</b></dt>
<dd><font face='monospace'>lógico lRet</font> - Retorna verdadeiro (TRUE) se a mensagem foi enviada com sucesso ao gRPC Server corretamente. Em caso de erro retorna FALSE, consultar ErrorCode() e ErrorDesc()</dd>
</dl><dl><dt><b>Exemplos:</b></dt>
<dd>[code]<br />
oGRPC:MsgId := "idval"<br />
oGRPC:MsgType := "C"<br />
oGRPC:MsgContent := "mensagem enviada do client para o server"<br />
oGRPC:MsgAud := "audience"<br />
oGRPC:MsgDeliveryTag := 0<br />

<br />

<br />
if ogRPC:sendMessage()<br />
conout("Mensagem enviada com sucesso)<br />
else<br />
conout(ogRPC:ErrorDesc())<br />
endif<br />
[code]<br />
</font></dd></dl></dd></dl><hr />
<a name='waitformessages()'><!-- --></a><p><b>waitForMessages</b></p><dl><dt><font face='monospace'>caractere - <b>waitForMessages</b>()</p>
</font></dt><dd><p>Aguarda e recebe uma mensagem do servidor</p>
<dl><dt><b>Retorno:</b></dt>
<dd><font face='monospace'>caractere lRet</font> - Retorna o conteudo da mensagem (tambem setada em :MsgContent) se a mensagem foi recebida com sucesso ao gRPC Server corretamente. Em caso de erro não altera o conteudo da :MsgContent, e pode ser consultado ErrorCode() e ErrorDesc()</dd>
</dl><dl><dt><b>Exemplos:</b></dt>
<dd>[code]<br />
ogRPC:MsgContent := ""<br />
conout(ogRPC:waitForMessages())<br />
if(ogRPC:MsgContent = "")<br />
conout("erro, nao veio informacao do servidor")<br />
conout(ogRPC:ErrorDesc())<br />
else<br />
conout("Mensagem recebida com sucesso)<br />
endif<br />

<br />
[code]<br />
</font></dd></dl></dd></dl><hr />
<a name='ackmessage()'><!-- --></a><p><b>ackMessage</b></p><dl><dt><font face='monospace'>lógico - <b>ackMessage</b>()</p>
</font></dt><dd><p>Envia reconhecimento de uma mensagem no cliente</p>
<dl><dt><b>Retorno:</b></dt>
<dd><font face='monospace'>lógico lRet</font> - Retorna o conteudo da mensagem (tambem setada em :MsgContent) se a mensagem foi recebida com sucesso ao gRPC Server corretamente. Em caso de erro não altera o conteudo da :MsgContent, e pode ser consultado ErrorCode() e ErrorDesc()</dd>
</dl><dl><dt><b>Exemplos:</b></dt>
<dd>[code]<br />
ogRPC:MsgContent := ""<br />
conout(ogRPC:waitForMessages())<br />
if(ogRPC:MsgContent = "")<br />
conout("erro, nao veio informacao do servidor")<br />
conout(ogRPC:ErrorDesc())<br />
else<br />
oGRPC:MsgAckDeliveryTag := 1<br />
ogRPC:MsgAck := .T.<br />
if ogRPC:ackMessage()<br />
else<br />
conout("setar reconhecimento falhou")<br />
conout(ogRPC:ErrorDesc())<br />
endif<br />
conout("Mensagem recebida com sucesso)<br />
endif<br />

<br />
[code]<br />
</font></dd></dl></dd></dl><hr />
<a name='errorcode()'><!-- --></a><p><b>ErrorCode</b></p><dl><dt><font face='monospace'>numérico - <b>ErrorCode</b>()</p>
</font></dt><dd><p>Retorna o codigo de erro do ultimo comando realizado</p>
<dl><dt><b>Retorno:</b></dt>
<dd><font face='monospace'>numérico lRet</font> - Codigo de erro (obs: erros 100 são internos)</dd>
</dl><dl><dt><b>Exemplos:</b></dt>
<dd>[code]<br />
ogRPC:MsgContent := ""<br />
conout(ogRPC:waitForMessages())<br />
if(ogRPC:MsgContent = "")<br />
conout("erro, nao veio informacao do servidor")<br />
conout(ogRPC:ErrorCode())<br />
else<br />
conout("Mensagem recebida com sucesso)<br />
endif<br />

<br />
[code]<br />
</font></dd></dl></dd></dl><hr />
<a name='errordesc()'><!-- --></a><p><b>ErrorDesc</b></p><dl><dt><font face='monospace'>caractere - <b>ErrorDesc</b>()</p>
</font></dt><dd><p>Retorna a descrição do erro do ultimo comando realizado</p>
<dl><dt><b>Retorno:</b></dt>
<dd><font face='monospace'>caractere lRet</font> - Descricao do erro</dd>
</dl><dl><dt><b>Exemplos:</b></dt>
<dd>[code]<br />
ogRPC:MsgContent := ""<br />
conout(ogRPC:waitForMessages())<br />
if(ogRPC:MsgContent = "")<br />
conout("erro, nao veio informacao do servidor")<br />
conout(ogRPC:ErrorDesc())<br />
else<br />
conout("Mensagem recebida com sucesso)<br />
endif<br />

<br />
[code]<br />
</font></dd></dl></dd></dl><br />