Amount of users on network

Post Reply
Marc Vanzegbroeck
Posts: 1102
Joined: Mon Oct 17, 2005 5:41 am
Location: Belgium
Contact:

Amount of users on network

Post by Marc Vanzegbroeck »

Hi,

Is there a way to see how many users open a FWH program on a network.
I know I can make a counter in a database that increase everytime that program is executed, en decrease while exiting.
The problem there can be that when the program crash, or when the network-connection is broken, the counter is wrong.
Regards,
Marc

FWH32+xHarbour | FWH64+Harbour | BCC | DBF | ADO+MySQL | ADO+MariaDB | ADO+SQLite
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Amount of users on network

Post by FranciscoA »

Hi, please try this:

The UserLogging function creates the txt file for user control when it enters the program and deletes it when it exits.
To view all connected users, you can use the ShowConectedUsers function.
( Idea tomada de un usuario aqui en el foro: hmpaquito)
http://fivetechsupport.com/forums/viewt ... 7bf#p82909

Code: Select all

//----------------------------------------------------------------
//USUARIOS CONECTADOS    --  Francisco J. Alegria P. Sept/2010
//----------------------------------------------------------------
//---------------------------------------------------------------//Ctrl usuarios activos en este programa
Function UserLogging(lNew)
local cDirUserLog := cPathDef+"\USERSLOG"
local cUserLog
local cEquipo:=NetName(.f.)
local nHand, FO_SHARED := 64

If !lIsDir(cDirUserLog)  //creamos el sub-dir
   lMkDir(cDirUserLog)
Endif

//cNombUser es static, y se toma del fich de usuarios
cUserLog := cDirUserLog+"\"+Substr(cNombUser,1,12)+cEquipo+".log"

If lNew  //Entrando
  nHand := FCreate( cUserLog )

  FWrite(nHand, cNombUser + CRLF+;       //usuario del programa
                cEquipo   + CRLF+"")       //nombre del equipo
  FClose(nHand)

  //Lo abrimos en modo shared. (nHandUserLog es static)
  //Cuando se requiere ver los conectados al programa, se trata de abrir en exclusivo,
  //y si no se puede, es que el usuario esta conectado al programa. (Ver ShowConnectedUsers())
  nHandUserLog := FOpen( cUserLog, FO_SHARED ) // abrimos  el fichero compartido

Else  //Saliendo
   FClose(nHandUserLog)
   Ferase(cUserLog)
Endif

Return nil

/* --------------------------------------------------------------------
//Fileio.ch
OPEN MODES:     
FO_READ      0  Open file for reading 
FO_WRITE     1  Open file for writing
FO_READWRITE 2  Open file for reading and writing

SHARING MODES:
FO_COMPAT    0 Compatibility mode
FO_EXCLUSIVE 16 Exclusive use
FO_DENYWRITE 32 Prevent other applications from writing
FO_DENYREAD  48 Prevent other applications from reading
FO_DENYNONE  64 Allow others to read or write
FO_SHARED    64 Same as FO_DENYNONE
 -------------------------------------------------------------------- */

//----------------------//Mostrar usuarios activos en este programa
Function ShowConnectedUsers()
local cDirUserLog := cPathDef+"\USERSLOG"
local aDir := DIRECTORY(cDirUserLog + "\*.*", )
local nHand, aActiveUsers:={}, cLogText, cFich
local cUserName,cComputName
local FO_EXCLUSIVE:=16

AEVAL( aDir, {|aFich| cFich:=cDirUserLog+"\"+aFich[F_NAME],;
       if( nHand := FOpen( cFich, FO_EXCLUSIVE ) < 0,;  //si no se abre exclusivo es que usuario esta conectado.
         ( cLogText := MemoRead(cFich),;
           cUserName   := Trim(MemoLine(cLogText, 254,1)),;
           cComputName := Trim(MemoLine(cLogText, 254,2)),;
           aadd( aActiveUsers, {cUserName,cComputName} ) ),;
           FClose(nHand) ) } )

XBrowse(aActiveUsers,"Usuarios conectados a "+cExeName)
Return nil
Regards.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
Marc Vanzegbroeck
Posts: 1102
Joined: Mon Oct 17, 2005 5:41 am
Location: Belgium
Contact:

Re: Amount of users on network

Post by Marc Vanzegbroeck »

Francisco,

Thank you for the reply.
Now I have already something like that, but instead of saving it to a file, I save it in the database.
The problem is that when the program is started, it save it to the database, but when the connecting is lost, without exiting the program first, or if the program crashed, the data is still in the database.
So, the other users think that the user is still in the program.

The only way that I can remove it by starting the program again from the same PC/USER.
Regards,
Marc

FWH32+xHarbour | FWH64+Harbour | BCC | DBF | ADO+MySQL | ADO+MariaDB | ADO+SQLite
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: Amount of users on network

Post by Marcelo Via Giglio »

Hello Marc,

I don't sure, but I think one way can be to lock a record in a table (dbf) users while the user is logged, when the user logout, unlock the record, I think (no sure) when client lost the conection, the record is unlocked automatlicaly, you can test

saludos

Marcelo
Post Reply