FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Amount of users on network
Posts: 1195
Joined: Mon Oct 17, 2005 05:41 AM
Amount of users on network
Posted: Sun Oct 06, 2019 08:10 PM

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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Amount of users on network
Posted: Wed Oct 09, 2019 03:30 PM
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)
viewtopic.php?f=6&t=16001&hilit=usuarios+conectados&sid=445b23062ba78d3030099d8213c107bf#p82909
Code (fw): Select all Collapse
//----------------------------------------------------------------
//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.



Fwxh-MySql-TMySql
Posts: 1195
Joined: Mon Oct 17, 2005 05:41 AM
Re: Amount of users on network
Posted: Wed Oct 09, 2019 04:21 PM

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
Posts: 1088
Joined: Fri Oct 07, 2005 03:33 PM
Re: Amount of users on network
Posted: Wed Oct 09, 2019 08:08 PM

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

Continue the discussion