Yazýlarýmý Daha Kolay Takip Etmek Ýçin Týklayýn!

XNA'de Multiplayer Network Temelleri – 5

yazan: 9/9/2008 8:36:00 AM

4 yazı planlamıştım ama 5. yazımla karşınızdayım. Bir önceki yazımda bu yazıda gerekli olacak tüm açıklamayı yapmıştım bunları tekrarlamak istemiyorum. Bu nedenle XNA’de Multiplayer Network Temelleri – 4 adlı yazımı mutlaka okuyun. Hemen konuya kaldığım yerden dalıyorum

AgIsleri.cs’de; ağda paketlerimizi SendData() ile gönderip RecieveData() ile almadan önce paketlerimizi (ağ mesajlarımızı) yazmamızı ve okumamızı sağlayacak nesnelerimizi üretiyoruz.

        PacketWriter paketYazici = new PacketWriter();

        PacketReader paketOkuyucu = new PacketReader();

Şimdi mesajlarımızı yollamaya geldi sıra;

        public void MesajAt(string mesaj)

        {

            // aynı makinadaki tüm oyunclar – PC için gereksiz.

            foreach (LocalNetworkGamer oyuncu in oturum.LocalGamers)

            {

                // göndermeden evvel mesajı pakete yazıyoruz

                paketYazici.Write(mesaj);

    // paketi güvenlik tedbiri olmadan yolluyoruz “none”                   

    // diyerek. İlk parametre gördüğünüz gibi; yazılan

    // paketi barındıran, PacketWriter tipinde nesne

                oyuncu.SendData(paketYazici, SendDataOptions.None);

                durum = "Mesaj yollandı: " + mesaj;

            }

        }

Bu arada ilk çnceki yazımda bahsetmedim sanırım, SendData() metodunun bir overload’u sayesinde paketi istediğimiz herhangi bir oyuncuya yolayabiliyoruz, bunu yapmak için 3. parametreye NetworkPlayer tipinde oyuncu belirtmemiz gerekiyor. 3. parametre yoksa mesaj tüm oyunculara gider.

Sıra mesajları alacak fonksiyonun yapısına geldi. Ama önce RecieveData() metodunun gelen paketten, veriyi (byte[] veya PacketReader tipinde) ve gönderen kullanıcıyı (NetworkGamer tipinde) bize sunduğunu söylemek istiyorum.

        public void MesajAl ()

        {

            NetworkGamer uzakOyuncu; // Paketi yollayan oyuncu

            foreach (LocalNetworkGamer yerelOyuncu in oturum.LocalGamers)

            {

                // Ağda alınmamış veri olduğu sürece, almaya devam ediyoruz

                while (yerelOyuncu.IsDataAvailable)

                {

                    yerelOyuncu.ReceiveData(paketOkuyucu, out uzakOyuncu);

                    // farklı makinadaki oyunculardan mesaj alıyoruz

                    if (!uzakOyuncu.IsLocal)

                        durum = "Alınan mesaj: " +

                        paketOkuyucu.ReadString();

// burada gönderilen veriye göre ReadString() //metodunu seçtik verinin türü başka olsaydı uygun //metodu seçecektik.

                }

            }

        }

Mantık basit, veri olduğu sürece ağı taradık ve bilgileri aldık, alırken mesaj içeriğini PacketReader nesnesine oyuncu bilgisini de NetworkGamer den ürettiğimiz nesneye aktardık. Out anahtar sözcüğüne dikkat.

Son olarak da mesajın içeriğini çözdürdük.

Şimdi sıra Game1.cs den bu metotları çağırmaya geldi. Sadece oyun “Playing” durumunda iken mesajlarımızı iletmek istiyoruz bu nedenle update metodunda;

            // sadece playing durumunda mesajlaşmaya izin ver

            if (agYardimcisi.OyunDurumu == NetworkSessionState.Playing)

            {

                // basılmış tuşun bilgisini string olarak karşıya yolla

                foreach (Keys tus in Keyboard.GetState().GetPressedKeys())

                    agYardimcisi.MesajAt(tus.ToString());

                // aynı şekilde karşıdan al

                agYardimcisi.MesajAl();

            }

Böylece paket alışverişini sağlamış olduk. Böylece bu uzun XNA’de multiplayer network temelleri adlı serimizi bitirmiş olduk. Yazılanları geliştirin, bazı yerleri kurcalayın, bazı eklemeler yapın, tuşlar ekleyin menu oluşturun hem böylece kodun nerede ne tepki vereceğini daha iyi anlamış olursunuz.

Currently rated 5.0 by 2 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: , , , , ,

XNA

 

Yazar Hakkýnda

Erçin YONTAR
Erçin Yontar
1986 yýlýnda Çorlu'da doðdu.Ýlk öðrenimini Ankara'da, ortaöðrenimini Eskiþehir'de gördü.
Çanakkale 18 Mart Üniversitesi Bilgisayar Mühendisliði Bölümü mezunu.
Yazýlým ile çok ilgili; Visual Studiosu daima açýk :) bunun sayesinde Imagine Cup 2008 Türkiye 3.sü ve bir çok proje geliþtiriyor.
Yazýlým dýþýnda : Frp hastasý, rock/metal dinliyor, organizasyon iþlerine merak sardý. Bunlarýn yanýnda o bir; 
MCTS (Microsoft Certified Technology Specialist)



MSP (Microsoft Student Partner)

Bana posta atýn Send mail

Favorilerine Ekle


Add to Technorati Favorites

 

Twitter - Ne Yapýyorum?

    Pages

      Recent comments

      Feragatname

      Burada yazan yazýlar ve içerdikleri fikirler yazarýna aittir. Baþkasýný ilgilendirmez. Yazýlarý kaynaðýný kopyaladýðýnýz yazýnýn içinde týklanabilir link halinde belirtmek þartý ile olduðu gibi kullanabilirsiniz. Bu kurallarý deðiþtirme hakkým saklýdýr. Yarýn bir gün benim yazým benim blogumdan baþka bir yerde olamaz dersem Kopyaladýðýnýz yazýyý da silmek zorundasýnýz. Bu iþe girþen kiþi bu koþullarý ve doðan yasal yükümlülükleri kabul etmiþ sayýlýr. Eyvallah diyen devam etsin.

      © Tüm haklarý saklýdýr.

      Giriþ