fernandobatels / rsfbclient

Rust Firebird Client
MIT License
76 stars 11 forks source link

EventAlert #133

Closed timanagement closed 1 year ago

timanagement commented 2 years ago

Desde já quero parabenizar todos os envolvidos. Existe algo para utilização de Firebird EventAlert no RUST com a rsfbclient ?

fernandobatels commented 2 years ago

Desde já quero parabenizar todos os envolvidos.

Obrigado

Existe algo para utilização de Firebird EventAlert no RUST com a rsfbclient ?

Ainda não, mas posso implementar. Tens um caso de uso ou algum fonte/biblioteca de outra linguagem para servir de exemplo?

timanagement commented 2 years ago

Caro Fernando, criei um projeto console com .Net6 onde pode ser verificado a aplicação do FbRemoteEvent que pertence ao package FirebirdSql.Data.FirebirdClient

Juntei ao projeto demo a base de dados que criei para este exemplo.

Depois vou subir um projeto de conexão com RUST usando a tua crates e deixar público para ajudar quem desejar aprender RUST e conectar ao Firebird.

https://github.com/timanagement/console_fbevent

fernandobatels commented 2 years ago

Bacana. Vou verificar o material e estudar como trazer esse recurso para a crate.

timanagement commented 2 years ago

Bacana. Vou verificar o material e estudar como trazer esse recurso para a crate.

Será muito bem vindo, pois permitirá, por exemplo, criar uma aplicação como serviço que execute determinada rotina acionada por um evento...

Se precisar de algo a mais, por favor não deixe de comunicar.

fernandobatels commented 2 years ago

Essa API de eventos do Firebird é bem desafiadora hehe. Até o momento fiquei levantando o material sobre o assunto e tudo o que precisarei implementar.

Você possui experiência com essa API a nível mais baixo? Pelo que andei vendo, preciso registrar o evento no fb e manter um loop esperando pela operação op_event.

timanagement commented 2 years ago

Na verdade, pelo pouco que analisei, o componente que trata eventos estabelece uma conexão direta com o banco(penso que teria que ter uma crate que lide diretamente com a conexão com o banco) e então quando registramos um evento, o SGDB retorna a string registrada para todos que se registraram.

Segundo o manual, os eventos retornam string.

Infelizmente não possuo experiências, além do uso, conforme descrito no manual o qual deixarei o link abaixo:

https://www.firebirdsql.org/file/documentation/papers_presentations/Power_Firebird_events.pdf

Outro link que possa te interessar para estudo, é sobre o node e de como eles usam o "fb-native.cpp" para lidar com eventos. Em especial, a partir da linha 226:

https://github.com/asfernandes/node-firebird-drivers/blob/master/packages/node-firebird-native-api/src/native/fb-native.cpp

Ou diretamente olhando em:

https://github.com/FirebirdSQL/firebird/blob/master/examples/interfaces/08.events.cpp

fernandobatels commented 2 years ago

Sim. Consegui um material bom nos exemplos do firebird:

https://github.com/FirebirdSQL/firebird/blob/master/examples/api/api16.c#L131

Ainda não tive uma grade evolução, mas aos poucos vai avançando.

fernandobatels commented 1 year ago

Travei no isc_event_block. Vou deixar essa issue de lado por um tempo. Mais tarde faço push do que estava sendo desenvolvido. Futuramente volto a atacar esse problema.

timanagement commented 1 year ago

Caro Fernando, vou buscando mais informações e, caso encontre, vou reportando aqui. Desde já agradeço seus esforços.

Como é o caso deste material da embarcadero:

https://docwiki.embarcadero.com/InterBase/2020/en/Creating_EPBs_with_isc_event_block(_)

timanagement commented 1 year ago

Travei no isc_event_block. Vou deixar essa issue de lado por um tempo. Mais tarde faço push do que estava sendo desenvolvido. Futuramente volto a atacar esse problema.

Tem um repositório que implementou para uso com node: node-firebird-libfbclient. Acredito que mostra o ponto onde vc disse ter travado. Veja os dois arquivos abaixo:

fb-bindings-eventblock.h fb-bindings-eventblock.cc

https://github.com/xdenser/node-firebird-libfbclient/tree/master/src

Espero que seja útil.

Abraços

fernandobatels commented 1 year ago

Opa.

Aparentemente o isc_event_block não foi usado, vou tentar entender como o projeto usa o isc_que_events sem ele.

Obrigado pelo material.

fernandobatels commented 1 year ago

Consegui passar o do isc_event_block. Resolvi recorrer ao stackoverflow e deu boa. Logo subo novos commits.

fernandobatels commented 1 year ago

@timanagement , creio que deu certo. Você poderia testar a branch firebird-events e verificar se já lhe atende?

timanagement commented 1 year ago

Seus esforços resultaram em sucesso.

Vou tentar descrever:

Na 1ª imagem está a configuração no seu exemplo para acessar o BD.

Na 2ª imagem está a Trigger criada para escutar o evento "SINC_USUARIO".

Na 3ª imagem está o que será executado, todas as vezes que o evento for escutado.

Na 4ª imagem está o resultado obtido.

imagem 1 image

imagem 2 image

imagem 3 image

imagem 4 image

timanagement commented 1 year ago

Não tenho palavras para te agradecer...

fernandobatels commented 1 year ago

Hehe, que bom que você curtiu.

Essa semana resolvo o que foi apontado na PR e solto uma nova versão da crate. Obrigado pela paciência e consideração.

fernandobatels commented 1 year ago

Crate atualizada. Agora para usar o novo recurso basta usar a nova versão 0.23.0

timanagement commented 1 year ago

Crate atualizada. Agora para usar o novo recurso basta usar a nova versão 0.23.0

Perfeito. Obrigado mais uma vez.