Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Hacer un Chat para mi aplicación.... (https://www.clubdelphi.com/foros/showthread.php?t=95756)

Carmelo Cash 14-07-2022 18:18:31

Hacer un Chat para mi aplicación....
 
Buenos días Foro:

Estoy utilizando Delphi7 y Firebird 2.5

Tengo una aplicación en la que se conectan mas de 30 operadores en distintos sectores de la empresa.

La idea es hacer un form para enviar y recibir mensajes, individuales o a los operadores de un área específica.

Con el envío no tengo problema, lo cargo para cada operador con el campo leído en cero y listo.

Para leerlo...

Acá es donde se genera la consulta:

Opción 1 - ¿Tengo que hacer un timer que constantemente esté leyendo la tabla de mensajes?
o
Opción 2 - ¿Existe alguna forma que al grabar un registro en la tabla de mensajes se "Avise" a la aplicación que hay un mensajes por leer.?

La Opción 1 está muy fácil, pero los timers trato de evitarlos, porque si hay varios se pueden cruzar .
La Opción 2 no sé como hacerla.

Bueno.. hecha la consulta .

Desde ya muchas gracias por su atención.

:cool:

Casimiro Notevi 14-07-2022 19:41:34

Puedes usar los eventos de la base de datos para que lance un mensaje, aunque es más complicadito que un simple timer.
También puedes usar un TRxTimerList de las RXlib, es mis programas siempre utilizo ese componente en lugar de los timers "normales".
Se trata de una "list timer", con un solo componente puedes controlar todos los timers que necesites.
Échale un vistazo, es muy intuitivo de usar.

Carmelo Cash 14-07-2022 22:42:45

Gracias Casimiro...
cuando te refieres a :
"Puedes usar los eventos de la base de datos para que lance un mensaje,"

Por donde puedo empezar a analizar esto? que sería? un trigger?

Casimiro Notevi 15-07-2022 09:17:07

Me refiero a esto.

Neftali [Germán.Estévez] 15-07-2022 10:44:40

Cita:

Empezado por Carmelo Cash (Mensaje 547488)
Acá es donde se genera la consulta:

Opción 1 - ¿Tengo que hacer un timer que constantemente esté leyendo la tabla de mensajes?
o
Opción 2 - ¿Existe alguna forma que al grabar un registro en la tabla de mensajes se "Avise" a la aplicación que hay un mensajes por leer.?

La Opción 1 está muy fácil, pero los timers trato de evitarlos, porque si hay varios se pueden cruzar .
La Opción 2 no sé como hacerla.

Para la opción 2 tienes los eventos de Base de Datos.
Revisa esta entrada del blog (https://neftali.clubdelphi.com/event...notifications/) para que te hagas una idea del tema. Es sobre SQLServer, pero con ello puedes entender el tema de eventos. A partir de ahí hay que ver si se puede trasladar a Firebird.

Aquí también tienes el link a la web de embarcadero sobre el tema:
https://docwiki.embarcadero.com/RADS...lerts_(FireDAC)

Para poder utilizarlos debes cumplir 2 condiciones:
  • Que la Base de datos que estás utilizando tenga eventos implementados
  • Que los componentes de acceso que usas, los soporten para esa B.D.
Por lo que comenta [Casimiro] Firebird dispone de eventos en su versión 2.5.
Los componentes de Delphi que soportan Eventos son los de FireDAC (que no están disponibles en Delphi7).


Para solventar lo segundo, si tienes alguna versión "nueva" de Delphi (que tenga FireDAC), sólo se me ocurre que impementes lo necesario en una DLL (con la versión nueva utilizando FireDAC) y la llames desde tu programa en Delplhi 7.
O encontrar algunos otros componentes para Delphi7 que soporten eventos de FireBird.

Casimiro Notevi 15-07-2022 11:29:05

Los eventos los he usado desde siempre, incluso con delphi 4 y con las IBX, FIBplus, etc.

Neftali [Germán.Estévez] 15-07-2022 12:03:04

Cita:

Empezado por Casimiro Notevi (Mensaje 547498)
Los eventos los he usado desde siempre, incluso con delphi 4 y con las IBX, FIBplus, etc.

^\||/^\||/^\||/^\||/^\||/
No lo sabía.
Pues entonces ese es el camino. Mucho más sencillo.
Te evita tener que estar haciendo "pooling" continuamente sobre la tabla.

Carmelo Cash 15-07-2022 15:15:42

Listo

Ya tengo para arrancar, les contaré como termina esta historia.

Muchas Gracias a los dos.


La franja horaria es GMT +2. Ahora son las 07:02:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi