İçeriğe geç
Tüm projeler

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

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ı

Diller

Performans & metrikler

  • 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

Neden geliştirdim?

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

  1. 01Ticari kullanıma hazır; envanter, XP, seviye atlama ve defter (transaction ledger) takibi sunan Progression/Ekonomi sistemi
  2. 02SignalR Group API'si ile izole edilmiş masa (Table) ve klan/özel mesajlaşma odaları
  3. 03Farklı oyun modlarını (Okey 101, Klasik, Teke Tek) DI (Dependency Injection) üzerinden runtime'da enjekte eden Strateji Deseni implementasyonu
  4. 04WebRTC tabanlı sesli sohbet için sunucu taraflı sinyalleşme (signaling) rölesi
  5. 05Periyodik olarak hesaplanan ve önbelleğe alınan (MemoryCache) günlük, haftalık ve aylık liderlik tabloları

Teknik değerlendirme

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.

Oyun & Simülasyon

The Burglar's Quest

Her oturumda benzersiz harita dizilimleri sunan, prosedürel (procedural) üretim motoruna sahip Unity tabanlı bir gizlilik ve simülasyon oyunu.

  • C#
  • Unity

Oyun & Simülasyon

TSSB VR Simülasyonu

Travma Sonrası Stres Bozukluğu (TSSB) farkındalığı için tasarlanmış; dallanan (branching) psikolojik senaryolar ve Firebase telemetrisi içeren bir sanal gerçeklik (VR) simülasyonu.

  • C#
  • Unity
  • Firebase
  • +1

Backend & API

MangaSokağı: Tip-Güvenli NestJS & Prisma Backend Mimarisi

MangaSokağı e-ticaret platformunun çekirdek işlem motoru olarak görev yapan, bağımlılık enjeksiyonu (DI) ve uçtan uca tip güvenliği (end-to-end type safety) üzerine inşa edilmiş modüler NestJS REST API'si.

  • TypeScript
  • SQL
  • NestJS
  • +6

Benzer bir ihtiyacınız mı var?

Bu tür bir sistemi sizin için de kurabilirim.

Projenizi birkaç cümleyle anlatın; doğru yaklaşımı ve tahmini kapsamı birlikte belirleyelim.