Mensajes en red

281 views
Skip to first unread message

rodo

unread,
Apr 2, 2009, 6:57:06 PM4/2/09
to Mundo Visual FoxPro
Hola a todos, espero me puedan ayudar en lo siguiente:
he realizado una aplicacion en red, y funciona muy bien, pero(nunca
falta un bendito pero) se desea implementar un proceso en el cual
alguno de los usuarios de la aplicacion pueda enviarle a otro usuario
de la aplicacion un mensaje para indicarle alguna obseervacion(es una
especia de mensajeria interna), la idea es usar al poderoso VFP para
lograla , me pueden dar una yuda o idea de como realizarla.

a todos mil gracias por la colaboracion.

Jose Oscar Vogel

unread,
Apr 3, 2009, 6:51:12 AM4/3/09
to mundovis...@googlegroups.com
estoy desarrollando algo similar en mi trabajo, te comento como lo hago

1) se debe crear un formulario con un timer, y se lo pone como invisible
2) en el evento timer lo que tienes que hacer es consultar alguna tabla donde vas a guardar los mensajes, indicando de quien viene y a quien va
3) cada vez que haya un mensaje para el usuario que esta logueado pones el formulario en visible y como ShowWindow=2
4) en ese formulario tienes que mostrar el mensaje mas un boton de leido, que al hacer clic tiene que cambiar la propiedad de leido o borrar el mensaje y ocultar el formulario.

mas o menos esa es la idea

cualquier cosa me avisas

saludos Oscar
--
Prof. Jose Oscar Vogel
Garuhapé - Misiones
CP 3334
Cel: 03743-15498001

Yvan GMAIL

unread,
Apr 3, 2009, 9:32:54 AM4/3/09
to mundovis...@googlegroups.com
He desarrollado lo que tu aparentemente necesitas.. Te detallo lo que hace..
 
Tengo 2 programas corriendo en cada PC..
1. Msmanager.exe.- El programa se inicia cada vez que el usuario enciende su computador. Este programa no es visible al usuario, hasta que detecte un mensaje por leer para el usuario. Pero el detalle es como saber en que PC mostrar el Mensaje. El detalle es que he amarrado el Usuario a una PC. De esta manera en el timer del msmanager hace esto
  1.1. Obtiene el nombre de la PC
  1.2. Busca el nombre de la PC en la tabla de usuario y luego retorna el usuario enlazado
  1.3. Busca Mensajes pendientes de dicho usuario
  1.4. Si hay mensaje x leer lo muestra en pantalla y cambio el estado del mensaje
 
2. aamp0000 -> Este programa si es visible al usuario.. pero aparece en la parte inferior derecha de la pantalla (encima del reloj). Es una barra con varios botones, en una de ella está el botón para enviar mensajes, el otro para crear recordatorios, etc.
   
    Aquí al pulsar en el botón Crear mensaje.. El sistema le muestra la lista de usuarios de la Red. obtenido de la base de datos.. adicionalmente verifica si la PC del usuario está encendida o al menos a su alcance.. (Esto con una API).. Seguido de esto sombrea a los usuario inactivos de otro color.
 
  El usuario escribe el mensaje a enviar... creándose un registro con usuario origen y usuario destino.. Con el estado de Pendiente x Leer. Mensaje que será revisa por el msmanager.exe
 
Los voy a adjuntar para que lo revises. Por siaca.. el tema del recordatorio trabaja con Postgresql. por lo que solo podrías usar el tema de mensajería interna.
 
* Archivos.. Msmanager.zip Msmanager.rar
* Archivos.. mgs_alerta.zip o mgs_alerta.rar
 
 

Fox-Polilla

unread,
Apr 3, 2009, 11:44:50 AM4/3/09
to Mundo Visual FoxPro
Hola copia este codigo en un prg y correlo.
**************************************************************
* Envio de Mensaje atraves de la Red
osender = createobject( "Mensaje")
osender.recipient = "177.110.200.123" && Ip del equipo al que se
envia el mensaje
osender.returnaddress = "!!! MENSAJE !!!"
define class mensaje as custom
recipient = ""
returnaddress = ""
usenetsend = .f.
procedure init()
dodefault()
endproc
procedure destroy
dodefault()
endproc
procedure error(nerror, cmethod, nline)
endproc
function send( tcmessage)
local lnresult
lnresult = 0
with this
if type( ".Recipient") != "C" or empty( .recipient)
return -1
endif
if type( "m.tcMessage") != "C" or empty( m.tcmessage)
return -2
endif
if .usenetsend
local lccmd, loshell
lccmd = "NET SEND " + alltrim( .recipient) + ' "' + alltrim
( m.tcmessage) + '"'
loshell = createobject( "WScript.Shell")
if type( "m.loShell") = "O" and !isnull( m.loshell)
lnresult = m.loshell.run( m.lccmd, 0, .t.)
else
lccmd = m.lccmd
!&lccmd
endif
else
declare integer NetMessageBufferSend in NetAPI32 ;
string @ servername, ;
string @ msgname, ;
string @ fromname, ;
string @ buf, ;
integer buflen
local lcmsgname, lcfrom, lnmsglen, lcmsgbuf
lcfrom = .returnaddress
if type( "m.lcFrom") != "C" or empty( m.lcfrom)
lcfrom = "Unknown"
endif
lcmsgname = strconv( alltrim( .recipient) + chr( 0), 5)
lcfrom = strconv( alltrim( m.lcfrom) + chr(0), 5)
lcmsgbuf = strconv( alltrim( m.tcmessage) + chr(0), 5)
lnmsglen = len( m.lcmsgbuf)
lcmsgbuf = m.lcmsgbuf + chr(0) + chr(0)
lnresult = netmessagebuffersend( .null., m.lcmsgname, m.lcfrom,
m.lcmsgbuf, m.lnmsglen)
endif
endwith
return m.lnresult
endfunc
enddefine
**************************************************************
Espero que te sirva y me comentes si te sirvio

Jaime A. Morales
Bogota - Colombia
Reply all
Reply to author
Forward
0 new messages