Hi Olaf,
Here is my code which is re written
****** * D:\MIS\SERVER_MAIN.PRG
*: Documented using Visual FoxPro Formatting wizard version .05
*:******************************************************************************
*: SERVER_MAIN
_SCREEN.CAPTION='MIS Server'
LOCAL lcmainclasslib
*Local lclastsettalk,lclastsetpath,lclastsetclasslib,lconshutdown
PUBLIC MAX_USERS,hexmacid,lic_string
*lic_string=''
MAX_USERS=0
SET SYSMENU OFF
*-- Save and configure environment.
SET TALK OFF
SET DATE TO british
SET ECHO OFF
SET SAFETY OFF
SET STATUS BAR OFF
SET CONSOLE OFF
SET CENTURY ON
SET RESOURCE OFF
SET PROCEDURE TO mis_srv.fxp
lcmainclasslib="stock"
SET CLASSLIB TO (lcmainclasslib) ADDITIVE
SET CLASSLIB TO "spl" ADDITIVE
*Set Classlib To "ajm_class" Additive
*-- Instantiate application object.
*Release goApp
PUBLIC goapp
_SCREEN.WINDOWSTATE= 0
*_Screen.BackColor=Rgb(177,199,254)
_SCREEN.CLOSABLE=.F.
**(B)**END******************
goapp=CREATEOBJECT("cApplication")
*-- Configure application object.
goapp.cstartupform="misserver"
*-- Show application.
goapp.SHOW
****** * D:\MIS\MISSERVER.SCX
PROCEDURE INIT
SET TALK OFF
SET ECHO OFF
SET DATE TO british
_VFP.AUTOYIELD=.F.
abcd='9999'
THIS.TAG=licensed()
licstring=ALLTRIM(THIS.TAG) && load lic string
IF licstring==''
MESSAGEBOX('License Error -1',0+16,'Error')
ELSE
srvport=VAL(abcd)&& load this from config File REcommended
THISFORM.rmtlisten1.janal.OBJECT.LocalPort = srvport
THISFORM.rmtlisten1.janal.OBJECT.LISTEN
lstport=THISFORM.rmtlisten1.janal.OBJECT.LocalPort
THIS.label1.CAPTION='Listening to Port : '+ALLTRIM(STR(lstport))+CHR(13)
THIS.label2.CAPTION='Max Users : '+ALLTRIM(STR(MAX_USERS))+ CHR(13)
PUBLIC ARRAY licarray(MAX_USERS,5)
FOR i=1 TO MAX_USERS
licarray(i,2)='' &&logged user name
licarray(i,3)=''
licarray(i,4)='' && login time
licarray(i,5)=0
ENDFOR
ENDIF
ENDPROC
CAPTION = "ShutDown"
TABINDEX = 1
NAME = "cmdClose"
PROCEDURE CLICK
x=0
IF TYPE('licarray',1)=='A'
FOR i=1 TO MAX_USERS
IF VARTYPE(licarray(i,1))='O'
IF licarray(i,1).janal.OBJECT.state=7 && if connected
x=x+1
ENDIF
ENDIF
ENDFOR
ENDIF
IF MESSAGEBOX("Users connected : "+ALLTRIM(STR(x))+CHR(13)+;
"Shut Down ?",4+32+256,'M.I.S')=6
THISFORM.rmtlisten1.janal.OBJECT.CLOSE()
RELEASE licarray
THISFORM.RELEASE()
goapp.RELEASE
ENDIF
ENDPROC
NAME = "Rmtlisten1"
janal.NAME = "janal"
PROCEDURE janal.ConnectionRequest
*** ActiveX Control Event ***
LPARAMETERS requestid
IF TYPE('licarray',1)=='A'
***count Users connected already
x=0
FOR i=1 TO MAX_USERS
IF VARTYPE(licarray(i,1))='O'
IF licarray(i,1).janal.OBJECT.state=7 && if connected
x=x+1
ENDIF
ENDIF
ENDFOR
IF x=MAX_USERS
**Noop**
ELSE
**Accept connection to First available socket
FOR i=1 TO MAX_USERS
IF VARTYPE(licarray(i,1))='O'
ELSE
licarray(i,1)=CREATEOBJECT('lic') && assign new socket
licarray(i,1).janal.OBJECT.LocalPort=0
licarray(i,1).janal.OBJECT.LISTEN
licarray(i,1).COMMENT=ALLTRIM(THISFORM.TAG) && Lic String
licarray(i,2)=''
thaakkol=SYS(2)
licarray(i,3)=SYS(2007,thaakkol,0,1)
licarray(i,1).janal.ConnectionRequest(requestid,i,thaakkol)
EXIT
ENDIF
ENDFOR
ENDIF
ENDIF
=SYS(1104) && Purge memory Buffer
ENDPROC
INTERVAL = 3000
NAME = "Timer1"
PROCEDURE TIMER
samayam=VAL(THIS.TAG)
THIS.TAG=STR(samayam+THIS.INTERVAL)
x=0
Y=0
IF TYPE('licarray',1)=='A'
***count Users connected already
FOR i=1 TO MAX_USERS
IF VARTYPE(licarray(i,1))='O'
x=x+1
IF licarray(i,1).janal.OBJECT.state=7 && if connected
Y=Y+1
auth_FLAG=VAL(licarray(i,1).TAG)
IF auth_FLAG>0
DO CASE
CASE auth_FLAG=3
licarray(i,1).janal.OBJECT.CLOSE()
licarray(i,1)=.F.
licarray(i,2)=''
licarray(i,3)=''
licarray(i,4)=''
licarray(i,5)=0
THISFORM.list1.INIT()
CASE auth_FLAG=1 && if connection not authenticated
mt=0
ct=VAL(SYS(2))
ot=licarray(i,5)
IF ct<ot
mt=(86400-ot)+ct
ELSE
mt=ct-ot
ENDIF
**check time out ..max 5 sec.
IF mt>5
*** if timed out then close socket
licarray(i,1).janal.OBJECT.CLOSE()
licarray(i,1)=.F.
licarray(i,2)=''
licarray(i,3)=''
licarray(i,4)=''
licarray(i,5)=0
THISFORM.list1.INIT()
ENDIF
ENDCASE
ENDIF
ELSE && if State<>7
licarray(i,1).janal.OBJECT.CLOSE()
licarray(i,1)=.F.
licarray(i,2)=''
licarray(i,3)=''
licarray(i,4)=''
licarray(i,5)=0
THISFORM.list1.INIT()
ENDIF
ENDIF
ENDFOR
ENDIF
ENDPROC
****** * D:\MIS\SPL.VCX
NAME = "janal"
PROCEDURE DataArrival
*** ActiveX Control Event ***
LPARAMETERS bytestotal
strData = SPACE(256) && Define string to pass to GetData
THIS.OBJECT.GETDATA(@strData)
arrived_msg=xorwrap(strData)
STRTOFILE(CHR(13)+'DataArrival from '+THIS.OBJECT.RemoteHostIP+' and memory : '+SYS(1016)+TTOC(DATETIME())+'#','mislicserver.log',1)
STRTOFILE(CHR(13)+'Data '+ALLTRIM(arrived_msg)+' and memory : '+SYS(1016)+TTOC(DATETIME())+'#','mislicserver.log',1)
ALINES(msgarray,arrived_msg,4,CHR(200))
IF TYPE('msgarray')='U' && if array not created
THIS.PARENT.TAG='3'
**error
ELSE
IF MOD(ALEN(msgarray),2)>0 && elements are not correct
THIS.PARENT.TAG='3'
**error3
ELSE
msgID=VAL(msgarray(1))
IF msgID<1
THIS.PARENT.TAG='3'
ELSE
DO CASE
CASE msgID=1 && handshaking return msg against rahasya chodyam
rahasyam=(ALLTRIM(msgarray(2)))
IF rahasyam==ALLTRIM(THIS.TAG)
THIS.PARENT.TAG='2' && authenticated
THIS.OBJECT.SendData("2"+CHR(200)+ALLTRIM(THIS.PARENT.COMMENT)) && send license string 'HPO' if everything ok
ELSE && if handshaking failed
THIS.OBJECT.SendData("3"+CHR(200)+"Hand shaking Error") && send Error Msg to client'
THIS.PARENT.TAG='3'
ENDIF
CASE msgID=5 && arrives when an user logged in msg=user name,licarray element No
* MESSAGEBOX(msgarray(2))
ALINES(poda,msgarray(2),4,",")
IF TYPE('poda',1)='A'
licarray(VAL(poda(2)),2)=poda(1) &&msgarray(2)
ENDIF
CASE msgID=4 &&user log request from client
IF TYPE('licarray',1)=='A'
log_string=''
x=0
******
FOR i=1 TO MAX_USERS
IF VARTYPE(licarray(i,1))='O'
IF licarray(i,1).janal.OBJECT.state=7 && if connected
log_string=log_string+licarray(i,2)+;
' @ '+licarray(i,1).janal.OBJECT.RemoteHostIP+'¦'
ENDIF
ENDIF
ENDFOR
******
THIS.OBJECT.SendData("4"+CHR(200)+;
log_string) && send users connected
ENDIF
ENDCASE
ENDIF
ENDIF
ENDIF
*=Sys(1104)
ENDPROC
PROCEDURE ConnectionRequest
*** ActiveX Control Event ***
LPARAMETERS requestid,socket_element,chaavi
IF PARAMETERS()=3
thaakkol=ALLTRIM(SYS(2007,ALLTRIM(chaavi),0,1))
IF ALLTRIM(licarray(socket_element,3))==thaakkol
THIS.OBJECT.CLOSE()
*IF THIS.OBJECT.State<>7
THIS.OBJECT.ACCEPT(requestid)
IF THIS.OBJECT.state=7 && CONNECTED
***SEND GREEN FLAG SIGNAL TO CONNECTED IP
rahasyam=ALLTRIM(SYS(2007,SYS(2),33,1))
licarray(socket_element,2)=''
THIS.TAG=rahasyam && store secret question for later comparison
licarray(socket_element,4)=TTOC(DATETIME())
send_sTR="1"+CHR(200)+rahasyam+","+ALLTRIM(STR(socket_element))
THIS.PARENT.TAG='1'
licarray(socket_element,5)=VAL(SYS(2))
THIS.OBJECT.SendData(send_sTR) && ask first question
ENDIF
ENDIF
ENDIF
*ENDIF
ENDPROC
PROCEDURE CLOSE
*** ActiveX Control Event ***
FOR i=1 TO MAX_USERS
IF VARTYPE(licarray(i,1))='O'
IF licarray(i,1).janal.OBJECT.state=7 && if connected
ELSE
licarray(i,1).janal.OBJECT.CLOSE()
licarray(i,1)=.F.
licarray(i,2)=''
licarray(i,3)=''
licarray(i,4)=''
licarray(i,5)=0
ENDIF
ENDIF
ENDFOR
*=SYS(1104)
ENDPROC