Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Monitoreo de usuarios activos en la aplicación. (https://www.clubdelphi.com/foros/showthread.php?t=88573)

jeremiselxi 25-06-2015 22:10:51

Monitoreo de usuarios activos en la aplicación.
 
Buenas tardes Delphianos :).

Me han solicitado en la empresa donde estoy que haga una opción donde se puedan observar los usuarios que están activos en la aplicación con los siguientes datos:

Nompre de la PC.
IP Local.
UsuarioID de la red.
Hora Entrada.
Hora Salida

y todo esto en tiempo real.

He logrado hacer las 3 primeras cosas que son lo mas complicado con este código:


Código Delphi [-]

uses  WinSock,
  //Para la ip y el nombre del computador

  ComObj;     //para el usuario actual


function GetPCName: string;
var
  Buffer: array[0..MAX_COMPUTERNAME_LENGTH] of Char;
  Size: Cardinal;
begin
  FillChar(Buffer,Sizeof(Buffer),0);
  Size:= Sizeof(Buffer);
  if GetComputerName(Buffer,Size) then
    Result:= String(PChar(@Buffer))
  else
    Result:= '';
end;


function LocalIP : string; 
type 
TaPInAddr = array [0..10] of PInAddr; 
PaPInAddr = ^TaPInAddr; 
var 
phe : PHostEnt; 
pptr : PaPInAddr; 
Buffer : array [0..63] of char; 
I : Integer; 
GInitData : TWSADATA; 
begin 
WSAStartup($101, GInitData); 
Result := ''; 
GetHostName(Buffer, SizeOf(Buffer)); 
phe := GetHostByName(buffer); 
if phe = nil then Exit; 
pptr := PaPInAddr(Phe^.h_addr_list); 
I := 0; 
while pptr^[i] <> nil do 
begin 
result:=StrPas(inet_ntoa(pptr^[i]^)); 
Inc(I); 
end; 
WSACleanup; 
end;

procedure TForm1.Button6Click(Sender: TObject);
var Buffer: array [0..31] of Char;
begin
 GetEnvironmentVariable('USERNAME', @Buffer, SizeOf(Buffer));

Edit1.Text:= GetPCName;
edit2.text := LocalIP;
edit3.Text := Buffer

end;

Hasta aquí estoy bien, sin embargo no se como es la temática de este monitoreo.

Si alguien tiene experiencia en esto favor de darme una manito:).

Gracias de antemano.

Saludos.

Neftali [Germán.Estévez] 26-06-2015 09:41:21

Cita:

Empezado por jeremiselxi (Mensaje 493704)
Hasta aquí estoy bien, sin embargo no se como es la temática de este monitoreo.
Si alguien tiene experiencia en esto favor de darme una manito:).

La primera explicación bien, pero llegados a la pregunta te has "dispersado"...
¿Cual es la pregunta exactamente?
¿En qué te podemos ayudar?

duilioisola 26-06-2015 12:00:42

Cita:

Hasta aquí estoy bien, sin embargo no se como es la temática de este monitoreo.
Todo depende de a qué te refieras con "monitoreo".

Si quieres ver quién está conectado, puedes guardar estos datos en una base de datos y luego mirar quien se conecta, a que hora, etc.

También puedes querer que un mismo usuario no se conecte dos veces.
En este caso debes guardar en una base de datos los datos y al momento de conectar mirar si hay un registro activo (sin hora de salida). Si es así, cancelas la conexión y cierras el programa.

Si quieres ver qué es lo que hace cada usuario deberás guardar además "donde está" dentro de tu aplicación (formulario, modulo, etc.)

jeremiselxi 26-06-2015 14:43:50

1 Archivos Adjunto(s)
Cita:

Empezado por duilioisola (Mensaje 493729)
Si quieres ver quién está conectado, puedes guardar estos datos en una base de datos y luego mirar quien se conecta, a que hora, etc.

También puedes querer que un mismo usuario no se conecte dos veces.
En este caso debes guardar en una base de datos los datos y al momento de conectar mirar si hay un registro activo (sin hora de salida). Si es así, cancelas la conexión y cierras el programa.

Muy buenos días.

Estas dos cosas que mencionas es exactamente lo que necesito.

Adjunto una imagen de una aplicación que lo hace.

El tema es que no se cómo sería la mejor práctica ya que por ejemplo tengo una tabla llamada Usuarios con los datos básicos, ID, Usuario, Contraseña, Nombre Completo, Cédula etc.

Entonces no se como proceder, no se si crear un campo adicional que diga conectado (true = Si y false=no), o si mejor tomo los datos que necesito de la tabla usuarios y lo agrego a otra tabla para el monitoreo de los usuarios que están conectado para saber la hora y la salida de ellos.

Podrían darme algunas sugerencias de sus conocimientos de mas o menos como lo harían ustedes, ya que no tengo experiencia en este tipo de solicitudes :confused: .

Ademas dicen que dos o mas cabezas piensan mas que que una:):D

duilioisola 26-06-2015 15:22:10

En mis aplicaciones tengo una tabla de entradas, en donde guardo cada conexión a la aplicación.
ENTRADA (ID, ID_USUARIO, ID_UBICACION, FECHA_ENTRADA, FECHA_SALIDA)
Cuando entra un usuario creo una entrada con el campo FECHA_SALIDA vacío.
Cuando sale el usuario, modifico el campo FECHA_SALIDA con la fecha y hora actual.

Con esto puedo saber qué usuario está conectado y además marco otras tablas con el ID de la entrada para saber quien creo el registro y cuando.

Pare evitar que un mismo usuario entre desde dos ubicaciones distintas, lo que hago es rellenar el campo FECHA_SALIDA con la fecha y hora actual de las entradas abiertas (FECHA_SALIDA vacia) en ubicaciones distintas a la actual.
Un Timer mira cada minuto si la entrada todavía está abierta.
Si se ha cerrado, informo al usuario que alguien ha entrado con su nombre de usuario desde otra aplicación y cierro la aplicación.

jeremiselxi 26-06-2015 15:26:51

Cita:

Empezado por duilioisola (Mensaje 493735)
En mis aplicaciones tengo una tabla de entradas, en donde guardo cada conexión a la aplicación.
ENTRADA (ID, ID_USUARIO, ID_UBICACION, FECHA_ENTRADA, FECHA_SALIDA)
Cuando entra un usuario creo una entrada con el campo FECHA_SALIDA vacío.
Cuando sale el usuario, modifico el campo FECHA_SALIDA con la fecha y hora actual.

Con esto puedo saber qué usuario está conectado y además marco otras tablas con el ID de la entrada para saber quien creo el registro y cuando.

Pare evitar que un mismo usuario entre desde dos ubicaciones distintas, lo que hago es rellenar el campo FECHA_SALIDA con la fecha y hora actual de las entradas abiertas (FECHA_SALIDA vacia) en ubicaciones distintas a la actual.
Un Timer mira cada minuto si la entrada todavía está abierta.
Si se ha cerrado, informo al usuario que alguien ha entrado con su nombre de usuario desde otra aplicación y cierro la aplicación.

Excelente muchas gracias.

Haré las pruebas de lugar y te dejo saber.

Saludos.:) ^\||/


La franja horaria es GMT +2. Ahora son las 12:18:26.

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