Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Hacer un whatsapp en delphi (https://www.clubdelphi.com/foros/showthread.php?t=83679)

JULIPO 14-07-2013 02:39:06

Hacer un whatsapp en delphi
 
Reciban un cordial saludo.

estoy desarrollando un aplicativo que recibe informacion via tcp/ip desde equipos industriales, (plantas electricas, ruteadoras, Etc), para esto desarrolle un servicio para windows un datasnap server que trabaja con bases de datos Mysql y recibe la informacion de estos equipos por indy y la procesa, tambien desarrollamos un aplicativo tambien en windows datasnap client que transmite a las personas interesadas eventos como sobrecargas, bloqueos , Etc. El problema que tenemos es que debemos migrar este datasnap client a dispositivos moviles con sistema operativo android y dispositivos con sistema IOS la idea es instalar un servicio en estos dispositivos moviles que informe estos eventos a las personas autorizadas algo como un whatsapp que informe a la persona interesada del evento que presenta la maquina en cuestion.

como se hace?

no tengo claridad como funciona un programa como whatsapp, la idea tambien es que funcione asi el dispositivo este fuera de la red corporativa, es decir que transmita la informacion por la internet.

de antemano gracias por su ayuda.

AzidRain 14-07-2013 03:45:38

Tienes tres alternativas:

1.- Contratar un servicio SMS y programar el envío de las alertas vía mensajería celular
2.- Enviar un email (la mas sencilla y fácil de implementar) a los involucrados, si siempre tienen su teléfono conectado les llegará el aviso de inmediato.
3.-Crear una aplicación para android o iOS que se encargue de checar y alertar lo que quieres.

En lo personal empezaría por la opción 2, ya que no requiere saber ni donde ni como accesan al email los involucrados, y les llega igual que un SMS. Luego escalaría a la opción 1 y finalmente ya funcionando todo por la opción 3.

gatosoft 15-07-2013 16:06:43

https://pushover.net/

De acuerdo con todo lo que dice AzidRain. Yo personalmente contemplaría también las notificaciones mediante el servicio PushOver , el cual sirve para iOS y Android.

Hasta donde tengo entendido es gratuito... pero no estoy seguro pues no lo he utiizado aún. trabaja con servicios REST, y el único problema que yo veo, es que si tienes apagado el equipo o fuera de red, la notificación no te llega después, es decir, una vez el servicio recibe la notificación la retransmite de inmediato y no almacena nada.

Dependiendo de como lo veas, otro posible inconveniente, es que los usuarios deben comprar la aplciación en la app store o google store (Un dólar tal vez). No sería inconveniente si lo ves como una inversión: Un servicio ya implementado que te ahorra temas de desarrollo y mantenimeinto.

Otra inversión reomendada para trabajar el tema del PushOver es el TMS Cloud Pack, de la mepresa TMS software. Éste paquete trae ya implementada varios componentes VCL para trabajar aplicaciones de la nube y redes sociales (Twitter, Facebook, pushOver, SkyDrive, etc).

En la escala propuesta por AzidRain, yo lo pondría en el segúndo lugar, después de la opción del correo. Es más la opción del correo deberías implementarla aunque implementaras las demás.

1.- Enviar un email (la mas sencilla y fácil de implementar) a los involucrados, si siempre tienen su teléfono conectado les llegará el aviso de inmediato.
2-Implementar notificaciones via PushOver
3.- Contratar un servicio SMS y programar el envío de las alertas vía mensajería celular
4.-Crear una aplicación para android o iOS que se encargue de checar y alertar lo que quieres.

santus 19-07-2013 07:22:19

Si trabajas con datasnap, quizá te sirva la herramienta HTML5 Builder para no tener que cambiar de fabricante. La misma trae wizards para conectarse a un servidor datasnap lo cuál te ahorras de investigar como conectar con tus servidores.

Para hacer algo como un watsapp, deberías implementar un callback, que es muy fácil de hacer en delphi y creo haber visto algún ejemplo en html5 builder. Con phonegap puedes transformar una aplicación hml5 en "nativa", aunque eso no lo he probado.

Yo creo que para algo sencillo como esto te va a funcionar perfecto. Creo que es una solución más viable antes de ponerte a estudiar Java y Objetive-C.

Saludos.

JULIPO 05-08-2013 05:02:21

Aun nada
 
He revisado el tema del push over y funciona muy bien el problema es que es de pago, la idea es que necesitamos conectar muchos clientes y eso nos sale muy costoso, en cuanto al mail ya lo implementamos y el problema que tenemos es que no funciona en tiempo real, se puede presentar el caso de que el cliente reciba correos cada 5, 10 o mas minutos por lo que el mensaje llegara muy tarde, la idea es prevenir fallas en el sistema pero con un tiempo de respuesta superior a los 5 minutos nuestro aplicativo es simplemente una buena idea (le resulta mejor a la empresa realizar la llamada telefonica para avisarnos que los sistemas fallan), en cuanto a los sms dependemos de un servicio prestado por otra compañia en el caso de Colombia las empresas celulares son un verdadero desastre los mensajes pueden llegar incluso con retrasos de 1 dia, ademas son pagos tenemos el mismo problema del push over.

Podemos Crear un DataSnap Server pero quisiera saber algunas cosas.

Puedo enviar comandos a un cliente (me preocupa que muchos clientes esten preguntando al tiempo si tienen algun evento , mejor que el servidor cuando tenga algo le envie un comando al cliente para que actue).

si es asi alguien tiene un ejemplo que nos sirva de guia.


de antemano muchas gracias.

gatosoft 05-08-2013 05:38:47

Amigo, pues tu inquietud se resuelve utilizando CallBacks en DataSanap

Te recomeindo el artículo de Pawel Glowacki sobre el tema, y en general toda su serie "Delphi Labs".

Un saludo,

JULIPO 05-08-2013 21:47:56

Excelente solucion
 
Revise el tema y es exactamente lo que necesito, ahora me surgen unas dudas en el servidor de datasnap como identifico que clientes son los que estan conectados al servidor y como envio mensajes desde el servidor propiamente no desde 2 clientes sino desde el servidor al cliente, ademas me interesa saber si ya tengo un cliente conectado de una compañia que solo nos activo (nos pago un solo cliente), como puedo hacer que no se conecten mas clientes es decir que me rechace la conexion para estos casos del segundo cliente.

estoy algo emocionado con la solucion y a lo mejor sean cosas muy faciles pero no las entiendo mucho

De antemano muchas gracias por la ayuda

gatosoft 05-08-2013 22:42:05

En el articulo estan todas las respuestas, y para que lo veas mejor remitete a los videos (no puedo referenciarlos por limitaciones con youtube), buscalos en la red como "Delphi Labs"

Para saber los clientes que están conectados, puedes utilizar el TDSClientCallbackChannelManager.RegisterCallback, en el que cada cliente reporta al servidor un ID que lo identifica.


Con respecto a generar el mensaje desde el servidor, No estoy seguro, si puedes "embeber" un cliente en el servidor que implemente el TDSClientCallbackChannelManager. No estoy seguro si permita el Register (puedes probar y nos cuentas).

Pero podrías hacer lo siguiente:

Que tu servidor DataSanap sea solo una capa de comunicación (recibe mensajes y envía a los clientes), y puedes implementar un servicio separado que monitoree los eventos de las máquinas y cuando se dispare un evento, envíe el mensaje al servidor (de comunicación), y éste lo replcia a los clientes conectados...

solo una idea,

JULIPO 13-08-2013 03:31:03

De antemano gracias por tu ayuda
Cita:

Para saber los clientes que están conectados, puedes utilizar el TDSClientCallbackChannelManager.RegisterCallback, en el que cada cliente reporta al servidor un ID que lo identifica.
, estamos hablando del lado del servidor?, en el server container tengo 2 componentes el server y el DSTCPServerTransport, como puedo usar TDSClientCallbackChannelManager.RegisterCallback aqui ?

Perdona si estoy diciendo incoherencias pero la verdad no entiendo.

gatosoft 13-08-2013 22:55:22

En el articulo de Delphi Labs, muestra cómo se utiliza el componente TDSClientCallbackChannelManager.

Éste componente se crea en el cliente y utiliza el método register para reportar al servidor un ID...

El TDSClientCallbackChannelManager se conecta al servidor, por lo cual no se si pueda declarase dentro del mismo servidor.

Como solución te proponia:

1) implementar un DataSnapServer encargado de las comunicaciones entre aplicaciones
2) Tienes una applicación o servicio que monitorea unas máquinas (Ésta aplicación es un cliente del DataSnapServer y le envia las alertas que debe replicar, desde aqui se genera el callback)
3) Tienes unos Clientes (ipads, Pcs) a los cuales debes enviar notificaciones.

Si revisas los videos se verá mejor, pues se explica paso a paso...

Un saludo,

JULIPO 14-08-2013 06:03:31

si el problema es a la desconexion
 
Gracias por tu respuesta si es claro que el cliente puede tener un numero de ID pero como saber cuando un cliente se desconecta en el servidor tendría que preguntarle a todos quien se desconecto y el que no responda ese es pero cuando se tienen muchos cliente el proceso se hace engorroso.

desde el servidor tengo el evento ondisconnect en el componente DSTCPServerTransport1 pero no puedo ubicar quien fue el que se desconecto.

aclaro un poco la idea realizo un proceso de conexión y autenticacion en el servidor de datasnap, comparo los datos de usuario y password con una tabla en Mysql cuando logro la conexión grabo en la tabla desde el cliente el numero de id para que el cliente que se encarga de enviar la información tanto global como a cada uno de los clientes tenga identificado el numero de la conexión, hasta aquí bien, pero cuando me desconecto o pierdo la conexión no puedo identificar que cliente se desconecta,(ademas debo tener la posibilidad de desconectar a algún cliente desde el servidor ).

Espero se vea claro el problema para que me ayuden con la solución.

gatosoft 14-08-2013 08:09:26

Cita:

Empezado por JULIPO (Mensaje 465559)
Gracias por tu respuesta si es claro que el cliente puede tener un numero de ID pero como saber cuando un cliente se desconecta en el servidor tendría que preguntarle a todos quien se desconecto y el que no responda ese es pero cuando se tienen muchos cliente el proceso se hace engorroso.

desde el servidor tengo el evento ondisconnect en el componente DSTCPServerTransport1 pero no puedo ubicar quien fue el que se desconecto.

aclaro un poco la idea realizo un proceso de conexión y autenticacion en el servidor de datasnap, comparo los datos de usuario y password con una tabla en Mysql cuando logro la conexión grabo en la tabla desde el cliente el numero de id para que el cliente que se encarga de enviar la información tanto global como a cada uno de los clientes tenga identificado el numero de la conexión, hasta aquí bien, pero cuando me desconecto o pierdo la conexión no puedo identificar que cliente se desconecta,(ademas debo tener la posibilidad de desconectar a algún cliente desde el servidor ).

Espero se vea claro el problema para que me ayuden con la solución.

No tienes que saber cuando se desconecta..!!!, precisamente para eso es el CallBack y los Channels que definas...

En tema de Callbakcs el servidor lo hace todo, si revisas elvideo, la programación en el servidor fue nula, (un par de configuraciones)...

Ahora tenemos:
1) tus clientes se registran.
2) Otro cliente (El monitor de equipos) envía un mensaje de alerta...
3) el servidor recoge el mensaje y hace Broadcast o difusion a todos los clientes conectados... (tu no tienes que llevar el control de los clientes, ni programar nada en el servidor para que esto suceda)
4) si un cliente se desconecta, no pasa nada ... supongo que internamente le informara al servidor que se va y listo...

Ahora si por algún motivo necesitas "saber quien está conectado", para actualizar tus estados en la BD, pues puedes utilizar el mismo sistema de Callbacks para enviar un mensaje ping... es más, cada vez que envíes una alerta a tus clientes puedes solicitar una confirmación de leido mediante una respuesta al callback...

un saludo,


La franja horaria es GMT +2. Ahora son las 15:07:47.

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