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

Related posts

Comments

9/10/2008 3:25:26 AM

Mustafa KAYA

Ercin tebrik ederim XNA ile ilgili o kadar hızlı ve açıklayıcı yazılar hazırlıyorsun ki;)
Yakında bende bi seri başlatmayı düşünüyorum bakalım.

Mustafa KAYA

9/10/2008 4:03:46 AM

ERCİN

Teşekkürler Mustafa, beraber insanların bilgi ihtiyacını karşılayalım elimizden geldiğince, ne güzel; yazılarını merakla bekliyorum.

ERCİN tr

1/28/2010 6:58:37 AM

how to backup xbox 360 games

amazing theme! where did you get it?

how to backup xbox 360 games

2/25/2010 1:16:17 AM

mapquest usa

Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts.

mapquest usa

3/3/2010 12:38:40 PM

ucvhost

Thanks for the great post,i love to read articles that are informative and beneficial in nature.

ucvhost us

3/6/2010 1:10:50 PM

xbox 360 game copy software

4 adlı yazımı mutlaka okuyun. Hemen konuya kaldığım yerden dalıyorum

xbox 360 game copy software nl

3/27/2010 5:58:23 AM

Conservatory Pleated Blinds

Well said and your post is very well versed, but I can't agree with you completely

Conservatory Pleated Blinds us

3/30/2010 12:27:59 PM

ucvhost

Your blog is my favorite, congratulates. Often I'll look here, a lot of information and nice site.

ucvhost us

5/27/2010 11:55:42 PM

discount designer bags sale

Nice content, I trust this is a nice blog. Wish to see fresh content next time.

discount designer bags sale US

5/28/2010 6:39:25 PM

genital herpes outbreaks

very interesting indeed

genital herpes outbreaks us

7/9/2010 11:22:39 AM

bass fishing rods

Yeah, why not? Anyway it is as it is.

bass fishing rods gb

Add comment


(Will show your Gravatar icon)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Live preview

9/4/2010 12:11:13 PM

 

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þ