Oyun & Simülasyon
Özel

Okey & 101 Multiplayer Oyun Motoru: .NET 9 SignalR Backend

C#SQL.NET 9.0ASP.NET CoreSignalREntity Framework CorePostgreSQLConcurrent CollectionsJWTNginx

Unity tabanlı bir Okey/101 oyunu için ticari bir sözleşme kapsamında geliştirilmiş; otoriter sunucu (authoritative server) mimarisine sahip, gerçek zamanlı ve yüksek eşzamanlılıklı (highly concurrent) çok oyunculu oyun motoru.

Teknoloji Yığını

C#SQL.NET 9.0ASP.NET CoreSignalREntity Framework CorePostgreSQLConcurrent CollectionsJWTNginx

Sistem Metrikleri

Yüksek frekanslı oyun içi aksiyonlar (taş çekme/atma) sırasında veritabanına gitmek yerine `ConcurrentDictionary` üzerinden in-memory durum çözümü
Read-only (sadece okuma) yapılan EF Core sorgularında `AsNoTracking()` kullanılarak Change Tracker maliyetinin (memory allocation) sıfırlanması
Nginx Reverse Proxy arkasında çalışacak şekilde yapılandırılmış, X-Forwarded-For header'ları ile IP güvenliği sağlanan optimize edilmiş Kestrel sunucusu

Bunu Neden İnşa Ettim?

"Ticari bir freelance proje olarak geliştirilen bu sistemin amacı, geleneksel HTTP protokollerinin yetersiz kaldığı sıra tabanlı çok oyunculu masa oyunları (Okey, 101, Çanak) için düşük gecikmeli bir altyapı sağlamaktı. İstemci (Unity) manipülasyonlarını engellemek adına oyun kurallarının, taş dağıtımının ve kazanma validasyonlarının tamamen sunucu tarafında (authoritative) işletildiği, spagetti koda dönüşmeyecek modüler bir oyun motoruna ihtiyaç vardı."

Mimari & Kararlar

Sistem .NET 9.0 üzerinde koşar ve gerçek zamanlı çift yönlü iletişim için SignalR Hub'larını (`SocialHub`, `TableHub`) kullanır. Aktif oyun durumları (GameMatchState), veritabanı darboğazlarını (I/O bottlenecks) önlemek adına RAM üzerinde `ConcurrentDictionary` kullanılarak thread-safe bir şekilde yönetilir. Farklı oyun modları (Klasik, 101, Çanaklı vb.), `IGameRuleHandler` arayüzü üzerinden Strateji Deseni (Strategy Pattern) ile izole edilmiştir. Veri kalıcılığı (envanter, işlem defterleri, mesajlar) PostgreSQL ve Entity Framework Core aracılığıyla sağlanırken, liderlik tabloları gibi ağır aggregate işlemleri ana thread'i bloklamamak için `PeriodicTimer` tabanlı `BackgroundService` worker'larına devredilmiştir.

Temel Özellikler

  • 01.Ticari kullanıma hazır; envanter, XP, seviye atlama ve defter (transaction ledger) takibi sunan Progression/Ekonomi sistemi
  • 02.SignalR Group API'si ile izole edilmiş masa (Table) ve klan/özel mesajlaşma odaları
  • 03.Farklı oyun modlarını (Okey 101, Klasik, Teke Tek) DI (Dependency Injection) üzerinden runtime'da enjekte eden Strateji Deseni implementasyonu
  • 04.WebRTC tabanlı sesli sohbet için sunucu taraflı sinyalleşme (signaling) rölesi
  • 05.Periyodik olarak hesaplanan ve önbelleğe alınan (MemoryCache) günlük, haftalık ve aylık liderlik tabloları
Ticari bir ürün olarak teslim edilen bu mimarinin en kritik mühendislik kararı, State Management (Durum Yönetimi) ile Persistence (Kalıcılık) katmanlarının ayrılmasıdır. Oyun oynanırken taş dizilimleri ve sıra takibi bellekte milisaniyeler içinde çözülür. Oyun bittiğinde (ClaimWin), ACID uyumluluğunu garanti etmek için `db.Database.BeginTransactionAsync()` kullanılarak ödül, XP ve çanak dağıtımı tek bir transaction bloğunda veritabanına (PostgreSQL) yansıtılır. Bu sayede hem sunucu maliyetleri minimize edilir hem de olası crash durumlarında oyuncu bakiyelerinde tutarsızlık yaşanması donanımsal düzeyde engellenir.