vsro
vsro vsro
vsro vsro
vsro vsro
vsro vsro
vsro vsro
vsro

Reklam Alanları Hakkında Bilgilendirme !

Bu Alanlarda Bulunan Reklamlar Ücretlidir. Eğer Tarafımızda Bir Sunucu Hizmetiniz Varsa Eğer Daima Ücretsiz Olarak Kullanabilirsiniz. Detaylı Destek İçin Bizlere Ulaşınız.

Metin2 P2P Bağlantısını Kullanarak Web Sitesine Oyundan Anlık Veri Gönderip Almak (1 Viewer)

Admin

Site Kurucusu
Yönetici
Site Kurucusu
Offline
Merhaba arkadaşlar,
P2P dediğimiz zaman bir çoğumuz korkabilir. Bu zıkkım yüzünden başınıza gelmeyen kalmamıştır lakin ne işe yaradığını öğrendiğinizde kesinlikle çok seveceksiniz. <3

Öncelikle Nedur Bu P2P?
Peer-to-peer
ya da P2P olarak tanımlanır. Peer eş, denk demektir. İki veya daha fazla istemci arasında veri paylaşmak için kullanılan bir ağ protokolüdür.

Eşler, sunucuları veya sabit bilgisayarlar tarafından merkezi koordinasyon ihtiyacı olmadan, işlemci gücü, disk depolama veya ağ bant genişliği gibi kendi kaynaklarının bir kısmını, doğrudan diğer ağ katılımcıları için kullanılabilir yapabilir. Sadece sunucuların tedarikçi ve istemcilerin tüketici olduğu geleneksel istemci-sunucu modelinin aksine, eşler, hem tedarikçi hem de tüketicidir.

Metin2 Neden P2P'ye İhtiyaç Duyar?
Kanallar arası iletişimi sağlamak, anlık veri alıp göndermek için kullanılır.

Web Sitemiz İle Oyuna P2P İle Bağlanmak Mümkün Mü?
Evet mümkün fakat güvenlik önlemlerini çok iyi şekilde almanız gerekmektedir. P2P kodları ile serverinizi bir yönetici gibi yönetebilir..

Web Sitesinde P2P Bağlantısını Kullanarak Verileri Almak Mı Yoksa Veritabanı Kullanarak Almak Mı Karlı?
Bu çok az bilinen bir konudur fakat bu zamana kadar edindiğin tecrübelerde. Oyundaki her işlem anlık olarak veritabanına kayıt edilmez. Genelde fileslerde her 30dk'da bir oyun veritabanına yazılır. Bu süreyi düşürebilirsiniz.
Reboot atarken item kaybıda bu yüzden yaşanmaktadır.

Online sayacından örnek vermek gerekirse. Her bir karakteri alıp onun en son girdiği saate bakıp hepsini saydırmanız gereken bir sql cümlesi yazmanız gereklidir. Buda tabikide belli bir işlem gücü demektir. Bu veriler ise oyun ile eş bir şekilde çalışmaz. Oyunda veritabanı yedeğini ne kadar süre belirlediyseniz 30dk ise 30dk önce olanları gösterir..

Kısacası P2P kullanarak anlık olarak oyunda etkileşimde bulunabilir, veriler alabilirsiniz ve daha az kaynak tüketirsiniz.

Web Sitemizde P2P Yardımı İle Hangi İşlemleri Yaparız?
  • Anlık online sayacı yapabilirsiniz. Her bayrak için ayrı ayrı'da alabilirsiniz.
  • Oyuncuları dc atabilirsiniz.
  • GM kodlarını kullanabilirsiniz. (Panelden birisine gold gönderecekseniz p2p ile anlık gönderebilirsiniz. Veritabanı ile bu mümkün değildir! Karakterin 30dk oyunda olmaması gerekli.)
  • Anlık olarak item gönderebilirsiniz.
  • Ban, chat banı atabilrisiniz.
  • Serveri bakım moduna alabilirsiniz.
  • Eventleri açıp kapatabilirsiniz. (Panel üzerinden otomatik event başlatıcı ve bitirici sistem yapabilirsiniz.)
  • Panel üzerinden oyuna notlar gönderebilirsiniz.
Gördüğünüz gibi yapılacak çok şey var.

Tabi ben size burada her özelliği tek tek nasıl yazacağınızı anlatmayacağım.

P2P komutlarını öğrenmek için ilk önce serverinizin server kaynak kodunda;
game/src/input.cpp açıp;
Kod (C++):
  1. int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
bu satırı bulmanız.
Bunun altında "USER_COUNT" gibi komutlar var.

Örnek PHP komutu;
PHP:
  1. <?php

  2. function P2PSendServer($yazi, $tip = "NOTICE", $port = 13000)
  3. {
  4. // Metin2 serverin IP ve ADMINPAGE_PASSWORD
  5. $serverIp = "192.168.1.105"; $sifre = "buraya p2p adminpage_password gelecek!";

  6. // CREATE
  7. $socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);

  8. if ($socket < 0)
  9. {
  10. echo "\n Gecersiz socket...\n";

  11. exit;
  12. }

  13. $sonuc = socket_connect ($socket, $serverIp, $port);

  14. if ($sonuc < 0)
  15. echo "\n Bağlantı hatası. Hata : ".socket_strerror($sonuc)."\n";

  16. if($tip == "USER_COUNT")
  17. $sorgu = "\x40".$tip."\x0A";
  18. else
  19. {
  20. $sorgu2 = "\x40".$sifre."\x0A";
  21. $sorguBoyut2 = strlen($sorgu2);
  22. $sorguSonuc2 = socket_write($socket, $sorgu2, $sorguBoyut2);
  23. socket_recv($socket, $sonuc2, 256, 0);
  24. $sorgu = "\x40".$tip." ".$yazi."\x0A";
  25. }

  26. $sorguBoyut = strlen($sorgu);
  27. $sorguSonuc = socket_write($socket, $sorgu, $sorguBoyut);

  28. if ($sorguSonuc < 0)
  29. echo "Hata: ".socket_strerror($sorguSonuc)."\n";
  30. else
  31. $sonuc1 = socket_recv($socket, $sonuc2, 256, 0);


  32. if ($tip == "USER_COUNT")
  33. {
  34. $say = trim($sonuc2);
  35. $say = explode(' ', $say);
  36. //$say[0] = Kanaldaki toplam online
  37. //$say[1] = Kırmızı bayrak toplam online
  38. //$say[2] = Sarı bayrak toplam online
  39. //$say[3] = Mavi bayrak toplam online
  40. //$say[4] = Çekirdek toplam online
  41. return $say;
  42. }
  43. else
  44. {
  45. return "$sonuc2\n";
  46. }


  47. // P2P Baglantı kapat.
  48. socket_close($socket);
  49. }


  50. $say1 = P2PSendServer("", "USER_COUNT", 14000); //CH1


  51. ?>