Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
Ağ Programlama

Unity'de OnStopServer() Metodu: Sunucuyu Durdurma ve Temizleme

Paylaşan: Unity Eğitim 07 September 2025 4 dakika okuma 143 görüntülenme

Merhaba Unity geliştiricileri! Bu makalede, Unity'nin çok oyunculu oyun geliştirme sürecinde oldukça önemli bir fonksiyon olan OnStopServer() metodunu detaylı bir şekilde inceleyeceğiz. Bu metot, sunucunun durdurulması sırasında çeşitli temizleme işlemlerini gerçekleştirmenizi ve oyunculara sunucunun kapandığını bildirmenizi sağlar.

OnStopServer() Metodunun Amacı


OnStopServer() metodu, bir Unity ağ oyununda sunucu durdurulduğunda otomatik olarak çağrılır. Bu metot, sunucu tarafından kullanılan kaynakları serbest bırakmak, bağlantıları kapatmak ve oyunculara sunucunun kapanmakta olduğunu bildirmek için ideal bir yerdir. Bu işlemler yapılmadığı takdirde, sunucu kaynakları sızıntısı yaşanabilir ve oyuncular beklenmedik hatalarla karşılaşabilirler.

Ne Zaman Çağrılır?


OnStopServer() metodu, NetworkServer.Stop() fonksiyonu çağrıldığında veya sunucu beklenmedik bir şekilde çöktüğünde (örneğin, bir hata nedeniyle) çalıştırılır. Bu nedenle, sunucu kaynaklarının temizlenmesi için güvenilir bir mekanizma sağlar.

OnStopServer() Kullanım Örneği


İşte basit bir OnStopServer() kullanım örneği:
using UnityEngine;
using Mirror;

public class MyNetworkManager : NetworkManager
{
public override void OnStopServer()
{
base.OnStopServer();
Debug.Log("Sunucu durduruldu!");
// Burada sunucu kaynaklarını temizleme işlemleri yapılabilir.
// Örneğin, dosyaları kapatabilir, veritabanı bağlantısını sonlandırabilir,
// veya diğer oyunculara sunucunun kapatıldığını bildirebilirsiniz.
}
}


Bu örnekte, OnStopServer() metodu, sunucu durdurulduğunda konsola "Sunucu durduruldu!" mesajını yazdırır. Bu basit bir örnektir, ancak daha karmaşık senaryolarda, bu metot içerisinde daha fazla temizlik işlemi gerçekleştirebilirsiniz.

Oyunculara Bildirim Gönderme


Sunucu kapatıldığında oyunculara bildirim göndermek, iyi bir kullanıcı deneyimi için önemlidir. OnStopServer() metodu, bunu yapmak için ideal bir yerdir. Aşağıdaki örnekte, tüm oyunculara bir mesaj gönderiyoruz:
public override void OnStopServer()
{
base.OnStopServer();
Debug.Log("Sunucu durduruldu!");
foreach (var connection in NetworkServer.connections.Values)
{
connection.Send(new Message("Sunucu kapatılıyor. Lütfen oyundan çıkın."));
}
}

Bu örnekte, Message, sunucudan istemcilere gönderilen özel bir mesaj sınıfıdır. Bu sınıfın içeriğini ve nasıl gönderileceğini kendi projenize göre uyarlamanız gerekecektir. Mirror'da RPC (Remote Procedure Call) mekanizmasını kullanarak bunu gerçekleştirebilirsiniz.

Kaynak Temizleme


OnStopServer() metodu, sunucu tarafından kullanılan kaynakları temizlemek için de kullanılır. Örneğin, dosyaları kapatabilir, veritabanı bağlantısını sonlandırabilir, veya diğer oyunculara sunucunun kapatıldığını bildirebilirsiniz.

Önemli kaynaklar şunları içerebilir:


  • Dosyalar: Açık dosyaları kapatmak için System.IO kütüphanesini kullanabilirsiniz.

  • Veritabanları: Veritabanı bağlantınızı kapatmak için veritabanı sürücünüzün sağladığı fonksiyonları kullanmalısınız.

  • Ağ Bağlantıları: Tüm ağ bağlantılarınızı kapatmanız gerekir.

  • Timer'lar ve Coroutine'ler: Çalışan tüm timer'ları ve coroutine'leri durdurmanız gerekir.


Bu işlemler yapılmadığı takdirde, sunucu kaynakları sızıntısı yaşanabilir ve sunucunun performansı düşebilir.

Hata Yönetimi


OnStopServer() metodunda hata yönetimi oldukça önemlidir. Beklenmedik hataların oluşması durumunda, sunucu düzgün bir şekilde kapanmayabilir. Bu nedenle, try-catch bloklarını kullanarak olası hataları yakalamak ve uygun bir şekilde yönetmek önemlidir. Hataları günlüğe kaydederek daha sonra analiz edebilirsiniz.

Özet


OnStopServer() metodu, Unity'de çok oyunculu oyun geliştirmede sunucuyu düzgün bir şekilde kapatmak için hayati önem taşır. Bu metot, kaynakları temizlemek, oyunculara bildirim göndermek ve olası hataları yönetmek için kullanılır. Bu makalede öğrendiklerinizi kullanarak, daha güvenilir ve performanslı ağ oyunları geliştirebilirsiniz.

🧠 Ders Sonu Değerlendirme Testi

Dersi tamamladıktan sonra bilgilerinizi test edin ve ekstra puanlar kazanın.

🔥 +50 XP Ödül
🔒

Sınava Katılmak İçin Giriş Yapın

Bu ders sonu testini çözebilmek, bilginizi test edip **+50 XP** kazanmak ve **Sınav Şampiyonu** rozetinin kilidini açmak için üye girişi yapmalısınız.

Yorumlar (0)

Yorum yazabilmek ve derslere katkıda bulunabilmek için giriş yapmalısınız.

İlk yorumu siz yapın!