Konu: Terminallerde Programın Çalışıp Çalışmadığının Kontrol Edilmesi
Anamakineden terminallerde programın çalışıp çalışmadığını nasıl kontrol edebiliriz.
Giriş yapmadınız. Lütfen giriş yapın yada kayıt olun.
fox4um » Sunucu-İstemci Uygulamaları » Terminallerde Programın Çalışıp Çalışmadığının Kontrol Edilmesi
Anamakineden terminallerde programın çalışıp çalışmadığını nasıl kontrol edebiliriz.
terminallerde programin acik olup olmadiginin kontrolu yada askıda kalan (normal cikis yapmaya) kullanıcıları tespiti icin ben kullanici adlarinin tutuldugu tabloda LOGGED = .F. seklinde bir alan kullaniyorum .
programa giris aninda login formumum command buton kodu asagidaki gibi bu yolla giris yapmis olan kullanici LOGGED = .T. olarak tabloda isaretleniyor ve uygulama boyunca da sistemdeki kullanicilar
logged = .t. filtrelemesi ile vs gorulebiliyor
Use ADDBS(m.gcData)+'user' In 0 Shared Again
Select User
If Empty(Thisform.text1.Value)
Messagebox("Kullanıcı Adı Boş Geçilemez !!!",16,"Kullanıcı Giriş Hatası")
Return
Endif
Locate For User.KULL = Alltrim(Thisform.text1.Value)
If Found() And Alltrim(User.SIFRE) == Alltrim(Thisform.text2.Value)
If User.logged=.T.
Messagebox("Bu Kullanıcı Sisteme Giriş Yapmış !!!",16,"Kullanıcı Giriş Hatası")
Return
Endif
Thisform.cUser = Alltrim(User.KULL)
Thisform.cLevel = Alltrim(User.Level)
Store User.Level To gclevel
Store Alltrim(User.KULL) To gckullanici
Select User
Replace User.logged With .T. In 'user'
Thisform.Release
Else
Messagebox("Kullanıcı Adı Yada Şifre Hatalı...",16,"Hata !!!",1.5)
Thisform.text1.Value = ""
Thisform.text2.Value = ""
Thisform.text1.SetFocus
Endif
çıkış yordaminda ise asagidaki gibi bir kodlama kullanarak cıkıs yapan kullanıcının durumunu .F. a getiriyorum .
If Messagebox("Programdan Çıkılacak Onaylıyormusunuz ?",4+32+256,_Screen.Caption) = 6
If ! Used("user")
Use Addbs(m.gcData)+'user' In 0 Shared Again
Replace User.logged With .F. For User.kull=m.gckullanici In 'user'
Endif
Clear Events
Do kapanisyap
Endif
ayrıca login formumda kullandıgım bir combobox tada
* rowsource
select distinct kull,iif(logged=.t.,'Aktif','Pasif') from addbs(m.gcdata)+'user' order by kull into curs
combo1
*rowsource type
3-SQL Statement
seklinde combo calistirarakta programa giris anında askıda kalan ( normal cikis yapmayan ) kullanicilari ve digerlerini gorebiliyorum. buradaki Aktif lik ve Pasiflik durumu LOGGED = .T. mantıgına gorede sekillenmis oluyor .
Ama bu yontem 50% aktif kullanicilari gosterebilirken , normal cikis yapmayarak aktif gozukenleri de listeledigi icin tam arzulanan cozum olmayabilir.
Ama bunun için farklı çözümlerde mevcut aşağıda örnekten yola çıkarak sırayla kayitli terminallerdeki exelerin calisip calismadigi da bulunabilir
Local LnMultirun,LcExeName
LnMultirun = 0
LcExeName = "soykan.exe"
If IsRunning(m.LcExeName)
Messagebox("Program Zaten Çalışıyor...!!!")
Quit
Endif
FUNCTION IsRunning(tcSemaphoreName)
LOCAL lpszSemName
DECLARE INTEGER GetLastError IN win32API
DECLARE INTEGER CreateSemaphore IN WIN32API ;
STRING @ lpSemaphoreAttributes, ;
LONG lInitialCount, ;
LONG lMaximumCount, ;
STRING @ lpName
hsem = CreateSemaphore(0,0,1,tcSemaphoreName)
RETURN (multirun # 0 .AND. GetLastError() == ERROR_ALREADY_EXISTS)
mailine ornek kodlar gonderdim
ayrıca
http://www.vfpserver.com adresinden indirebilecegin uygulama ile acik dosya kontrolu vs leri monitoring eden bir uygulama var buda bir nevi VFP SQL Monitor
hangi tablolar acik hangi kullanicilar kullaniyor vs
FUNCTION IsRunning(tcSemaphoreName)
sadece kendi yarattıgin semaphorelari kontrol ediyor.
www.universalthread.com downloadsda, bu is icin bir kod olacakti. Benim de var ama public degil ne yazik ki. Isin temel mantigi eskiden Novel'in uyguladigi "watchdog" yontemi. Acik oldugunu iddia eden terminallere sinyal gonderip cevap bekliyorsun, cevap vermeyen "olu".
fox4um » Sunucu-İstemci Uygulamaları » Terminallerde Programın Çalışıp Çalışmadığının Kontrol Edilmesi