Merhaba hocam,
Öncelikle sunucuda bir adet MySQL veya MsSQL veritabanında bir tablo daha oluştur.
oluşturacağın tablonun alanlarıda:
Id(int, not null, PK), UserId(int, not null, FK), LastModifyDate(DateTime, null) şeklinde 3 alanı olsun ve user id Unique Index olsun.
client pc buraya ister direk database connection ile erişsin istersen .Net Web API ile json üzerinden erişip(Api daha güvenli olacaktır bağlantı bilgisi vermeyeceksin sonuçta) bu tablodaki alanları sorgulasın kullanıcı bu tabloda yoksa oluştursun ve LastModifyDate alanına tarih basıcaksın ama kullanıcının pc sindeki tarih farklı olabilir bu yüzden GETDATE() sorgusunu çalıştır sql den sana sunucunun tarih ve saatini dönderecektir bu durumda tarih ve saat kullanıcılardan bağımsız olacaktır. kullanıcın pc si program açıksa her 5 dk de bir buraya sorgu göndersin lastModifyDate'yi güncellesin 5 dk uzatsın her işlemde. diyelim kapadı, elektrik gitti en son saat 16:30 olarak kaldı şuan saat 16:45 ve Sunucu tarafında Quartz(C#, Vb.NET, JAVA için var diğerleri için varmı bilmiyorum) kullanarak LastModifyDate alanındaki değeri al ve tekrar GETDATE() çalıştır aradaki dakika farkı 5 dk den fazla ise IsOnline yi 0 yap. Sorun olursa Pm atarsın.
Kolay gelsin.
pc kapanması için dediğiniz gibi ping atıp kontrol ettirebilirim. Ama bir yandan da programın açık olup olmadığını kontrol etmem gerekiyor. Pc nin açık olması yeterli değil. programı kilitlendiği zaman görev yöneticisinden kapatırsa onu da yakalayabilmem lazım. yani senin dediğin yöneteme bir de programın çalışıp çalışmadığı kontrolünü eklersek herhalde başka case kalmaz gibi