Geliştirici Notları: Tabu
Giriş ve Mimari Yaklaşım
Paira Tabu, tamamen tarayıcı tabanlı çalışan, verileri depolamak için hiçbir merkezi veritabanı (Database) veya aracı oyun sunucusu barındırmayan, P2P (Peer-to-Peer) bağlantı mimarisine dayalı takım tabanlı bir yasaklı kelime anlatma oyunudur. Bu platform, Paira topluluğunun Kick yayınlarındaki interaktif deneyimini zenginleştirmek ve arkadaş gruplarının sıfır kurulumla oyun oynamasını sağlamak amacıyla öğrenci bir geliştirici (Ahmet) tarafından geliştirilmiştir.
Oyunda tüm durum (state) yönetimi ve senkronizasyon, sunucusuz mimarinin getirdiği sınırlamaları aşmak adına karmaşık bir Host-Client yapısıyla tarayıcı düzeyinde koordine edilmektedir.
P2P Ağ Topolojisi (Host-Client Modeli)
Çok oyunculu oyunların büyük çoğunluğunda bulunan sunucu-istemci mimarisi yerine, Paira Tabu'da WebRTC (Web Real-Time Communication) protokolü üzerinde yükselen bir Host-Client (Kurucu-Katılımcı) ağ topolojisi kullanılır:
- Host (Kurucu Node): Odayı ilk oluşturan oyuncu, oyunun merkezi koordinatörü (Host) haline gelir. Sunucu rolünü üstlenerek tüm oyun mantığını (Game Loop), turları, süreleri, puanlamayı ve kart karıştırma/seçme işlemlerini yerel tarayıcı hafızasında çalıştırır.
- Clients (Katılımcı Peer'lar): Oda kodunu girerek bağlanan diğer oyuncular, doğrudan Host ile peer-to-peer
RTCDataChannelbağlantısı kurarlar. Katılımcıların kendi aralarında doğrudan veri kanalları açması gerekmez; tüm bilgi akışı Host üzerinden dağıtılır. - Signaling (Sinyalleşme): Oyuncuların birbirlerini internet üzerinde bulup IP ve port bilgilerini (ICE Adayları) değiş tokuş edebilmesi için bir WebRTC aracı sinyalleşme (signaling) sunucusu (PeerJS altyapısı) kullanılır. Bağlantı kurulduktan sonra bu aracı sunucu tamamen devre dışı kalır.
Gerçek Zamanlı Veri Senkronizasyonu (Data Synchronization)
Oyun esnasında oyuncuların yaptığı tüm aksiyonlar ve oyun durumundaki güncellemeler, RTCDataChannel paketleri aracılığıyla anlık olarak iletilir. Veri trafiğinde aşağıdaki paket tipleri ve veri yapıları senkronize edilir:
SYNC: Host, oyun durumunu (puanlar, turlar, oyuncu listesi, aktif takım ve anlatıcı) güncellediğinde bu paketi tüm istemcilere yayınlar (broadcast).ACTION: Anlatıcı rolündeki oyuncu veya rakipler "Doğru", "Tabu" veya "Pas" butonlarına tıkladığında bu aksiyon paketleri doğrudan Host'a iletilir. Yetkilendirme kontrolü Host tarafından yapılarak durum güncellenir.CHAT: Sohbet kutusuna yazılan mesajlar, Host üzerinden diğer oyunculara dağıtılarak gerçek zamanlı bir oyun içi iletişim kanalı sağlar.PLAY_SOUND: Doğru, Tabu ve süre sonu gibi ses efektlerinin tüm oyuncularda eş zamanlı olarak çalınması için ses tetikleme paketleri gönderilir.
Süre senkronizasyonunda istemci ve sunucu arasındaki zaman kaymalarını önlemek amacıyla, milisaniye hassasiyetinde yerel zaman damgaları (localTurnEndTime) ve duraklatma farkları (pauseOffset) hesaplanır ve her SYNC paketinde güncellenerek istemcilerin zamanlayıcıları requestAnimationFrame döngüsüyle pürüzsüzce senkron tutulur.
Oda Mantığı ve Oturum Yönetimi
Her oyun odası, tarayıcının WebRTC soket adresi üzerinden aldığı 6 karakterli benzersiz bir Oda Kodu (Peer ID) ile temsil edilir. Oturum yönetimi şu şekilde işler:
- Oda Keşfi: Katılımcı oyuncu, oda kodunu girdikten sonra PeerJS aracılığıyla Host'un tarayıcısına bir bağlantı isteği (connection offer) gönderir. Karşılıklı SDP (Session Description Protocol) ve ICE Candidate alışverişinden sonra veri kanalı aktif hale gelir.
- Kart Yönetimi (Card Seed): Oyun başladığında, kart destesi JSON formatında (
tr.json) yüklenir. Host, desteyi karıştırmak ve her oyuncuya aynı sırada kart sunabilmek için bir zaman tabanlı tohum (gameSeed) belirler.seededShufflealgoritması kullanılarak kartlar karıştırılır ve istemcilere sadece anlatım sırası ve aktif kart verisi gönderilerek performans optimizasyonu sağlanır. - Oturum Kesintileri: Bir oyuncu internet sorunları nedeniyle odadan düştüğünde,
handlePlayerLeaveolayı tetiklenir. Eğer düşen oyuncu o andaki anlatıcı ise, Host otomatik olarak turu sonlandırır (endTurn) ve oyunu sıradaki oyuncuya aktarır, böylece oyun akışının tıkanması engellenir.
E-E-A-T & Güvenlik
Platform tamamen istemci tarafında (Client-Side) çalıştığı için kullanıcıların kişisel verileri, IP adresleri veya oyun içi yazışmaları herhangi bir uzak veritabanında depolanmaz. Tüm veri transferleri WebRTC'nin doğası gereği uçtan uca şifreli (End-to-End Encrypted - DTLS/SRTP) kanallar üzerinden gerçekleşir. Bu sayede hem maksimum hız ve minimum gecikme sağlanır hem de veri güvenliği en üst seviyede korunur.
Bu teknik dokümantasyon, tarayıcı tabanlı eş zamanlı oyun geliştirme meraklıları ve platformun altyapısını merak eden geliştiriciler için Ahmet Efe Yaşar tarafından hazırlanmıştır.