• 08-01-2014, 15:55:10
    #1
    Merhaba arkadaşlar,

    Yazılımcı arkadaşlardan tavsiyeler bekliyorum. Yardımcı olursanız sevinirim.

    Ben kullanıcı olarak hazırlamış olduğumuz programa giriş yapıyorum kullanıcı adı ve şifremle ve bir müşteri ile ilgili işlem yapmak için bir ekranı açıyorum aynı anda bir başka kullanıcının o müşteri ile ilgili işlem yapmasını istemiyorum. Bunun için ne önerirsiniz.

    Veritabanında "IsOnline" gibi bir değişken tutuyorum kullanıcı giriş yaptığında orayı 1 yapıyorum ve çıkış yaptığında 0 yapıyorum ama kullanıcı oturum kapatmadan direk process manager den programı kapatırsa böyle birşey yapamıyorum.

    benim aklıma başka birşey gelmiyor. Önerisi olan arkadaşlar varsa memnuniyetle dinlerim...

    Herkese teşekkür ederim
  • 08-01-2014, 16:00:47
    #2
    formun closing & closed eventine gerekli kodları uygulayıp 0 yaptır gerekli tabloyu
  • 08-01-2014, 16:10:13
    #3
    emrebeyoglu adlı üyeden alıntı: mesajı görüntüle
    formun closing & closed eventine gerekli kodları uygulayıp 0 yaptır gerekli tabloyu
    her türlü olasılığı düşünmek gerekir. Elektrikler kesildiği zaman yada kullanıcının bilgisayarı kilitlendiği zaman process manager den kapattığında o eventlere gireceğini sanmıyorum.
  • 08-01-2014, 16:17:39
    #4
    devveloper adlı üyeden alıntı: mesajı görüntüle
    her türlü olasılığı düşünmek gerekir. Elektrikler kesildiği zaman yada kullanıcının bilgisayarı kilitlendiği zaman process manager den kapattığında o eventlere gireceğini sanmıyorum.
    o zaman client-server ilişkisi kuracaksın ve 1 dakikada bir bağlantıyı test ediceksin servere clientten 1 dk. boyunca bildiri gelmezse gerekli tabloyu server tarafından 0 yaptırırsın hocam
  • 08-01-2014, 16:48:15
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    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.
  • 08-01-2014, 17:45:26
    #6
    Chosen77 adlı üyeden alıntı: mesajı görüntüle
    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
  • 08-01-2014, 18:13:27
    #7
    zaten sana son tarih 5 dk yi geçmişse program kapalı demektir ama diyorsun ki nereden kapatılmış bu konuda hiç çalışma yapmadım ama eminimki vardır örneğin exitcode değerine göre log tutup bunu anlayabilirsin.
  • 08-01-2014, 18:25:35
    #8
    Belli bir zaman aralığı belirleyin. ör: 5 saniye
    * Program içerisinde 5 saniye aralıklarla sql sunucusunda kendine ait IsOnline değerini 1 yapın. Ayrıca bu zamanı tabloda bir alana kaydedin.
    * Bu işlemi yaptıktan sonra kullanıcı tablosunda en son IsOnline 1 yapılma işleminden bu yana 5 saniyeden fazla geçen kullanıcıları 0 yapın.
  • 08-01-2014, 20:24:42
    #9
    Java'da Synchronized Metodları var, onları bir araştırın hocam.
    http://docs.oracle.com/javase/tutori.../syncmeth.html