Cómo saber que usuario esta usando la aplicación?

Cómo saber que usuario esta usando la aplicación?

Postby acuellar » Tue Jun 30, 2009 2:17 pm

Hola a todos

En internet he encontrado un programa WHOHASNT que me muestra que usuario esta utilizando la aplicación en la red, solo indicandole la carpeta. También permite cerrar

Se puede hacer esto con Fivewin-xHarbour, Cómo?

Lo necesito porque en el momento del cierre diario, hay usuarios que dejan algo abierto y se tranca, tenemos que averiguar que usuario.

Espero que alguién me pueda ayudar

Saludos cordiales

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Cómo saber que usuario esta usando la aplicación?

Postby jrestojeda » Tue Jun 30, 2009 2:44 pm

Hola amigo.
Yo tengo una rutina que la uso para saber cuales son los usuarios que están en el sistema a la hora de generar los indices.
Para verificar que solo se está en la PC que van a ejecutar tal operación.
Basicamente la función lo que hace es guardar en una tabla los usuarios que ingresan al sistema. (Nombre de PC y Usuario de Windows)
La tabla solo tiene esos dos campos.

NI bien ingreso al sistema hago lo siguiente:
Code: Select all  Expand view

USE ENUSO NEW
DATABASE oDbfUso
oDbfUso:bEof:=nil
oDbfUso:GoTop()

oDbfUso:Blank()
oDbfUso:PCNOMBRE:=GetEnv("COMPUTERNAME")
oDbfUso:PCUSER  :=GetEnv("USERNAME")
oDbfUso:Append()
oDbfUso:Save()
oDbfUso:UnLock()
oDbfUso:CLOSE()
 


Al salir del sistema hago lo siguiente para borrar el registro de que indica que el usario está en el sistema.
Code: Select all  Expand view

USE ENUSO NEW
DATABASE oDbfUso
oDbfUso:bEof:=nil
oDbfUso:SetOrder(1)
oDbfUso:GoTop()

DO WHILE !oDbfUso:Eof()
   IF ALLTRIM(oDbfUso:PCNOMBRE)=ALLTRIM(GetEnv("COMPUTERNAME")) .AND.;
      ALLTRIM(oDbfUso:PCUSER)=ALLTRIM(GetEnv("USERNAME"))
      oDbfUso:RecLock()
      oDbfUso:Delete()
      oDbfUso:UnLock()
   ENDIF
   oDbfUso:Skip()
ENDDO
oDbfUso:CLOSE()
 

Lo hago secuecialmente ya que generalmente no van a haber muchos usuarios en el sistema. Si fueran 100 esto igual sería muy rápido.

Bueno a la hora de ejecutar la función de generar índices ejecuto antes la siguiente función:
Code: Select all  Expand view

Function VerificaUsuarios(SiUser)
Local oDbfUso,C,PC,User

C:=0

USE ENUSO NEW
DATABASE oDbfUso
oDbfUso:bEof:=nil
oDbfUso:GoTop()

DO WHILE !oDbfUso:Eof()
   IF ALLTRIM(oDbfUso:PCNOMBRE)<>ALLTRIM(GetEnv("COMPUTERNAME")) .AND.;
      ALLTRIM(oDbfUso:PCUSER)<>ALLTRIM(GetEnv("USERNAME"))
      C++
      IF C=1
         PC    :=ALLTRIM(oDbfUso:PCNOMBRE)
         User  :=ALLTRIM(oDbfUso:PCUSER)
         SiUser:=.t.

         MsgStop("El usuario: ''"+User+"'' en la PC de la red: ''"+PC+"'' se encuentra utilizando el sistema"+CHR(13)+;
                 "Por favor, cierre el sistema en todas las PCs de la Red para poder realizar esta operación",;
                 "Imposible reindexar sistema")
         EXIT
      ENDIF
   ENDIf
   oDbfUso:Skip()
ENDDO
oDbfUso:CLOSE()

Return nil
 


Luego dentro de mi función reindexar la llamo asi:
Code: Select all  Expand view

Function Reindexa()
Local SiUser:=.f.

VerificaUsuarios(@SiUser)

IF SiUser
   Return nil
ENDIF

// Sigue el proceso
...
...
...

Return nil
 


Quizá hay formas más sencillas de hacer esto, pero es la forma que a mi se me ocurrió.
Espero puedas adaptar esto a tus necesidades.
Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Cómo saber que usuario esta usando la aplicación?

Postby acuellar » Tue Jun 30, 2009 3:07 pm

Gracias, Distinguido Esteban

Muy buena idea, la pondré en práctica, como dices quizas alguién tenga otra idea.

Saludos

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Cómo saber que usuario esta usando la aplicación?

Postby Adolfo » Tue Jun 30, 2009 3:48 pm

Holas ..


Se me ocurre algo...
...que algun guru se pronuncie.

...si tengo mi aplicacion "escuchando" en algun puerto, puedo enviar una solicitud de respuesta desde cualquier Pc a la red y los Pc's que esten en la aplicacion responderian con su nombre y usuario activo.

Para eso habria que utilizar sockets, que por los post que he visto, hay quienes los utilizan sin problemas, seria una buena solucion ademas que serviria para controlar el Nº de usuarios conectados al sistema, asi desarrollar versiones de 5, 10 o mas usuarios.

Alguna sugerencia.

voy a aprovechar de ver los ej, en una de esas no es tan dificil implementarlo.

Desde Chile

Adolfo
;-) Ji,ji,ji... buena la cosa... "all you need is code"

http://www.xdata.cl - Desarrollo Inteligente
----------
Asus TUF F15, 32GB Ram, 2 * 1 TB NVME M.2, GTX 1650
User avatar
Adolfo
 
Posts: 860
Joined: Tue Oct 11, 2005 11:57 am
Location: Chile

Re: Cómo saber que usuario esta usando la aplicación?

Postby Carles » Wed Jul 01, 2009 10:31 am

Hola Esteban,

La idea es un inicio, el problema es cuando algun cliente/usuario sale de la aplicacion de manera 'anormal'. Q ocurre entonces ? el registro se mantiene con sus datos y te impide a ti seguir. El ejemplo seria mas evoluciuonado si como dice p.e. Adolfo, a mas del nombre de maquina, pongas la ip del user. A la hora de verificar con las maquinas, enviar via socket a cada Ip y esta q responda. No es muy complejo de hacer, pero ya necesitas habilitar el sistema de envio/recepcion en cada app. (no se si me he explicado... :D )

Siau
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1134
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: Cómo saber que usuario esta usando la aplicación?

Postby jrestojeda » Wed Jul 01, 2009 12:04 pm

Carles wrote:Hola Esteban,

La idea es un inicio, el problema es cuando algun cliente/usuario sale de la aplicacion de manera 'anormal'. Q ocurre entonces ? el registro se mantiene con sus datos y te impide a ti seguir. El ejemplo seria mas evoluciuonado si como dice p.e. Adolfo, a mas del nombre de maquina, pongas la ip del user. A la hora de verificar con las maquinas, enviar via socket a cada Ip y esta q responda. No es muy complejo de hacer, pero ya necesitas habilitar el sistema de envio/recepcion en cada app. (no se si me he explicado... :D )

Siau

Si te explicas bien, es algo que se que le falta a esta rutina...
Por ahora lo que estoy haciendo es en ese caso volver a ingresar y salir del sistema en la PC que se salió de manera abrupta, sea el motivo que sea, corte de luz un bug del programa, etc... ingresando y saliendo ya se borra el registro, ya que lo hago secuencialmente y va a borrar todos los que hayan de la misma PC y el mismo usuario. Se que es un defecto de la rutina, pero en condiciones normales anda bien. Estaría bueno poder mejorarla un poco más, claro está.
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Cómo saber que usuario esta usando la aplicación?

Postby carlos vargas » Wed Jul 01, 2009 3:14 pm

Me parece que la idea de los Socker por parte Adolfo es adecuada, por que no permite sdaber en todo momento si la aplicacion esta arriba. pasando por altoi los problemas de cierre del programa por cualquier motivo.

salu2
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1719
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Cómo saber que usuario esta usando la aplicación?

Postby hmpaquito » Fri Jul 03, 2009 2:02 pm

Señores,

Hace mucho tiempo, en alguna lejana galaxia.... creo haber publicado la forma de resolver
este tipo de problemas.

Se trata de obtener un "algo" bloqueante que cuando caiga el sistema (la red, el pc, el ordenata, el ctrl+alt+del) se "recomponga" automaticamente y la solucion *ES:*

un fichero de texto....

¿ como ? un fichero de texto soluciona esto ? pues SI... vamos a ver:

PSEUDOCODIGO para hacer un fichero de texto como bloqueo:

nHandle:= FCreate(CODIGO_USUARIO+ ".log", MODO COMPARTIDO)
fwrite(nhandle, computername())

Si queremos saber si CODIGO_USUARIO esta conectado solo es necesario mirar si existe su log y si existe entonces intentar abrirlo en EXCLUSIVO y si no se puede abrir en exclusivo es que el usuario esta conectato... no se si me explique..


Con este sistema se puede:
Saber que usuarios estan conectados al programa o programas que emitan bloqueos de control
Poder saber que documentos estan bloqueados (albaranes, fras...), aquellos documentos que emitan bloqueos de controls
Impedir entrar a una aplicacion que ha sido bloqueada

Y parafraseando a aquel... "dame un fichero para bloquear y bloqueare el mundo""

POSTDATA:
1º Este sistema tiene la ventaja que funciona en cualquier sistema, incluso Clipper)
2º Este sistema no necesita identificacion de equipos, ni controls de IPs ni nada por el estilo que lo unico que producen son dolores de cabeza para el "programando"

saludos
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Cómo saber que usuario esta usando la aplicación?

Postby Marcelo Via Giglio » Sat Jul 04, 2009 2:12 am

....otra idea, nmo la he probado, pero me gustaria saber si funciona

supuestamente el sistama autentica usuarios, por lo tanto tienes una tabla (dbf) de usuarios, entonces,
cada usuario al ingresar al sistema podria bloquear su registro de la tabla de usuarios, por lo tanto intentando
bloquear estos registros, sabrias que usuarios estan usuando el sistema. No estoy seguro hasta donde una colgada
podria dejar bloqueado el registro, pero una mala salida creo que lo desbloquearia, haber si pruebas esta posible
solucion y nos comentas.

saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1064
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: Cómo saber que usuario esta usando la aplicación?

Postby acuellar » Sat Jul 04, 2009 1:43 pm

Hola a todos y Gracias por sus aportes

Siguiendo algunas ideas, al ingresar guardo el nombre del equipo, y al salir del sistema controlo cualquier salida con:

oWnd:bValid{ || Final(),.T.}

...

Funtion Final()
//Pongo el blanco el nombre del equipo
Return Nil

La única forma de que no va a la función Final() es cuando se quita la corriente o se cuelga.
Si dejamos la aplicación abierta y Pulsamos Alt-F4, cambiamos de sesión, reiniciamos o apagamos normal, funciona

Pero creo que se necesita algo más para controlar.

Saludos

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: cmsoft and 44 guests