• 08-12-2015, 13:56:14
    #10
    Kimlik doğrulama veya yönetimden onay bekliyor.
    void eventTimer()
    {
    while(1)//bir değişkenede bağlanabilir
    {
    int vMinute = getMinute();
    int vHour = getHour();
    int vDay = getDay();
    int foo[5] = {5,15,20,25,30};
    for(int i = 0;i<5;i++)
    {
    	if(foo[i] == vDay)
    	{
    		if(checkHour(vHour,vMinute) == true)
    		{
    			//do something
    		}
    	}
    }
    Sleep(1000);
    }
    }
    
    bool checkHour(int vHour,int vMinute)
    {
    int foo[9] = {3,5,9,12,15,17,20,22,23};
    for(int i = 0;i<9;i++){
    	if(foo[i] == vHour && vMinute == 0)//isteğe göre değiştirilebilir
    		return true;
    }
    return false;
    }
    
    
    void startTimer()
    
    {
    CreateThread(NULL,NULL, (LPTHREAD_START_ROUTINE)&eventTimer, NULL, NULL, NULL) ;
    
    //bu şekilde olabilir veya birden fazla thread çalışacaksa bir sınıf yazıp threadleri ordan nesne oluşturup bir vectore atayıp kontrolde edebilirsin
    //linuxta createthread yerine pthread_create olması gerekiyor kendiniz ayarlarsınız get minute,hour ve day fonksiyonlarını örnek olarak yazdım içlerini doldurursunuz
    }
    Edit:eventTimer fonksiyonundaki while içine Sleep(1000) koymayı unutmuşum koyulmazsa cpu sömürür
  • 12-12-2015, 01:38:26
    #11
    Kimlik doğrulama veya yönetimden onay bekliyor.
    barisceviz adlı üyeden alıntı: mesajı görüntüle
    Client-Server bazlı bir şey yapıyorsan arada bir köprü kurman gerekir. Beklektirip veri çekme işlemi yapıyorsan ooo. Eventlerin tetiklenmesi portlardan gelecek değerlere bağlı bir iş. Bir listener yazman veya TCP/UDP port üzerinden haberleşmen gerek. Multiplayer real time oyunlardan örnek vermek gerekirse bu oyunlar UDP port kullanır. UDP in TCP ye göre farkı gönderdiği paket geldi mi öldü mü kaldı mı kontrol etmez. TCP de varana kadar bekler. Varmazsa timeout a düşer vs. Oyunlar UDP port üzerine kurulu bir mimari ile haberleşerek en çözüme ulaşırlar. Böylelikle hızlı bir şekilde oyun akışı devam eder.
    Bu da bir online oyun zaten o yüzden en az yoracak şekilde yapmam gerekiyor. Şimdi benim düşünceme göre, olayın client ile alakası olmayacak. Clientle herhangi bir veri alışverişine gerek yok, sunucunun saatini baz alarak işlemleri yapacak. Zaten yapılan işlemler oyuncuyu ilgilendirmiyor, server tarafında yapılması gereken şeyler olduğu için tek taraflı yapmak yeterli. Bir fikriniz var mı ?

    SexClub adlı üyeden alıntı: mesajı görüntüle
    void eventTimer()
    {
    while(1)//bir değişkenede bağlanabilir
    {
    int vMinute = getMinute();
    int vHour = getHour();
    int vDay = getDay();
    int foo[5] = {5,15,20,25,30};
    for(int i = 0;i<5;i++)
    {
    	if(foo[i] == vDay)
    	{
    		if(checkHour(vHour,vMinute) == true)
    		{
    			//do something
    		}
    	}
    }
    Sleep(1000);
    }
    }
    
    bool checkHour(int vHour,int vMinute)
    {
    int foo[9] = {3,5,9,12,15,17,20,22,23};
    for(int i = 0;i<9;i++){
    	if(foo[i] == vHour && vMinute == 0)//isteğe göre değiştirilebilir
    		return true;
    }
    return false;
    }
    
    
    void startTimer()
    
    {
    CreateThread(NULL,NULL, (LPTHREAD_START_ROUTINE)&eventTimer, NULL, NULL, NULL) ;
    
    //bu şekilde olabilir veya birden fazla thread çalışacaksa bir sınıf yazıp threadleri ordan nesne oluşturup bir vectore atayıp kontrolde edebilirsin
    //linuxta createthread yerine pthread_create olması gerekiyor kendiniz ayarlarsınız get minute,hour ve day fonksiyonlarını örnek olarak yazdım içlerini doldurursunuz
    }
    Edit:eventTimer fonksiyonundaki while içine Sleep(1000) koymayı unutmuşum koyulmazsa cpu sömürür
    Emek harcamışsın teşekkürler. Peki bu şekilde bahsettiğim binlerce kişilik bir oyunda sıkıntı yapar mı ? Oyunun kendi dosyalarında sadece 2 sleep var o yüzden kullanıp kullanmamakta kararsızım bunu
  • 13-12-2015, 12:26:59
    #12
    linux için crontab konusunu araştırabilirsiniz.
    istediğiniz zaman istediğiniz scripti, programı çaşıltırıp istediğiniz işleri yapabilir, sıradaki görevi tanımlayıp çekilebilirsiniz.
    Mantığını anladığınızda basittir.
  • 13-12-2015, 13:48:10
    #13
    asoza adlı üyeden alıntı: mesajı görüntüle
    linux için crontab konusunu araştırabilirsiniz.
    istediğiniz zaman istediğiniz scripti, programı çaşıltırıp istediğiniz işleri yapabilir, sıradaki görevi tanımlayıp çekilebilirsiniz.
    Mantığını anladığınızda basittir.
    İnceledim ama malesef işime yaramaz. Oyuna dışardan komut verirsem resetler sonra aktif eder. Oyunun kaynağına, c++ diliyle eklemem gerekiyor.
  • 13-12-2015, 17:57:55
    #14
    Ne timer'ı ne sleep'i arkadaşlar. Yapacağın iş sadece şu aktif olmasını istediğin kodu

    if(date > startDate && date < endDate)
    {
    //active
    }


    Complex düşünmeye gerek yok server bazlıda olsa client da da aynı bu kodu koyup server tarfındada aynı bu kodu koyarak halledebilirsin
  • 13-12-2015, 18:30:08
    #15
    lyzerk adlı üyeden alıntı: mesajı görüntüle
    Ne timer'ı ne sleep'i arkadaşlar. Yapacağın iş sadece şu aktif olmasını istediğin kodu

    if(date > startDate && date < endDate)
    {
    //active
    }


    Complex düşünmeye gerek yok server bazlıda olsa client da da aynı bu kodu koyup server tarfındada aynı bu kodu koyarak halledebilirsin

    Client ve server tarafında saati denk getiremezsin, saat farkları olacak her zaman. Ayrıca date demişsin de hocam nasıl almayı düşünüyorsun date ?
    Dev bir projeden bahsediyoruz kod oraya gelecek saate bakacak ve geçip gidecek bir daha gelmeyecek. Yani kod geldiği anda saat tutarsa işlemi yapar yok tutmazsa bir daha sunucu resetlenene kadar kod aktifleşmez.
    Date sürekli kontrolü için de sleep'e muhtaç kalıyoruz o yüzden alternatif arıyorum

    düzenleme:
    Not: Eğer her oyuncu-sunucu etkileşiminde kontrol edelim diyorsanız bu sefer de aynı anda denk gelecek olursa işlemi birden fazla tekrarlayacak yoksa o sistemle yapmak çok basit 4 satır kodla bitiyor iş.
  • 14-12-2015, 00:40:54
    #16
    adme adlı üyeden alıntı: mesajı görüntüle
    Bu da bir online oyun zaten o yüzden en az yoracak şekilde yapmam gerekiyor. Şimdi benim düşünceme göre, olayın client ile alakası olmayacak. Clientle herhangi bir veri alışverişine gerek yok, sunucunun saatini baz alarak işlemleri yapacak. Zaten yapılan işlemler oyuncuyu ilgilendirmiyor, server tarafında yapılması gereken şeyler olduğu için tek taraflı yapmak yeterli. Bir fikriniz var mı ?



    Emek harcamışsın teşekkürler. Peki bu şekilde bahsettiğim binlerce kişilik bir oyunda sıkıntı yapar mı ? Oyunun kendi dosyalarında sadece 2 sleep var o yüzden kullanıp kullanmamakta kararsızım bunu
    hocam yazdığım şeklinden biraz daha gelişmiş halini knight online adlı oyun kullanıyor zaten şu güne kadar bir sıkıntı çıkartmadı
  • 14-12-2015, 09:14:57
    #17
    SexClub adlı üyeden alıntı: mesajı görüntüle
    hocam yazdığım şeklinden biraz daha gelişmiş halini knight online adlı oyun kullanıyor zaten şu güne kadar bir sıkıntı çıkartmadı
    kaynak kodları nerden buldun ko'nun ?
  • 14-12-2015, 09:58:31
    #18
    adme adlı üyeden alıntı: mesajı görüntüle
    Client ve server tarafında saati denk getiremezsin, saat farkları olacak her zaman. Ayrıca date demişsin de hocam nasıl almayı düşünüyorsun date ?
    Dev bir projeden bahsediyoruz kod oraya gelecek saate bakacak ve geçip gidecek bir daha gelmeyecek. Yani kod geldiği anda saat tutarsa işlemi yapar yok tutmazsa bir daha sunucu resetlenene kadar kod aktifleşmez.
    Date sürekli kontrolü için de sleep'e muhtaç kalıyoruz o yüzden alternatif arıyorum

    düzenleme:
    Not: Eğer her oyuncu-sunucu etkileşiminde kontrol edelim diyorsanız bu sefer de aynı anda denk gelecek olursa işlemi birden fazla tekrarlayacak yoksa o sistemle yapmak çok basit 4 satır kodla bitiyor iş.
    Saat farkı olsun ne olucak alırsın GMT'ye göre client'da kontrol edersin. Sen projenin herhangi bi yerine sleep koyarak projeyi zaten daha fazla tehlikeye atıyosun ki date'in alınımına takılmışsın bu kodu yazmadan önce date = time(0); ile alırsın, al sana date. Zaman gerektiren durumlarda bu şekilde bi kod kullanmak ne projeyi tehlikeye sokar ne sizi. Biraz yazılım bilginiz varsa zaten bunu kolaylıkla yaparsınız.

    İyi çalışmalar.