Geliştirici Notları: Chat Tabu
Giriş ve Mimari Yaklaşım
Paira Chat Tabu, Twitch ve Kick canlı yayıncılarının kendi izleyici kitleleriyle (chat) etkileşime girmesini sağlayan, tamamen istemci tarafında (Client-Side) çalışan interaktif bir tabu oyunudur. Geleneksel tabu oyunlarının aksine, tahminler klavyeden değil, izleyicilerin canlı chat mesajlarından otomatik olarak süzülür.
Uygulama, verileri saklamak için merkezi bir sunucu ya da veritabanı (Database) barındırmaz. Kurulum gerektirmeden çalışan bu sunucusuz yapı, yerel WebSocket bağlantıları ve WebRTC protokolü yardımıyla pürüzsüz bir oyun deneyimi sunar.
Canlı Yayın Chat Entegrasyonu (WebSocket & IRC)
Kick ve Twitch platformlarından akan canlı sohbet mesajları, ChatListener modülü aracılığıyla gerçek zamanlı olarak dinlenir:
- Twitch Entegrasyonu: Twitch IRC WebSocket kanallarına (
wss://irc-ws.chat.twitch.tv:443) bağlanarak standart IRC protokolü üzerinden ilgili kanalın sohbet mesajları yakalanır. - Kick Entegrasyonu: Kick API'leri ve WebSocket altyapısı kullanılarak odadaki canlı chat akışı anlık olarak takip edilir.
Yayıncı sohbeti dinlemeye başladığında, chate yazılan her bir mesaj saniyeler içinde oyun istemcisi tarafından ayrıştırılır ve işleme alınır.
FuzzyMatcher ile Kelime Eşleştirme Algoritması
İzleyicilerin klavye hatalarını, Türkçe karakter uyumsuzluklarını ve küçük yazım farklarını telafi etmek amacıyla istemci tarafında gelişmiş bir FuzzyMatcher (Bulanık Eşleştirme) algoritması koşulur:
- Kullanıcı tahmini ve hedef kelime öncelikle küçük harfe dönüştürülür (
toLocaleLowerCase('tr-TR')) ve gereksiz boşluklardan arındırılır. FuzzyMatcher, kelimeler arasındaki benzerlik oranını ve Levenshtein mesafesini hesaplayarak yazım hatalarını tolere eder.- Chat Tabu'da tabu tolerans seviyesi katı (strict) tutularak (
tolerance: 1.0) haksız puan kazanımlarının önüne geçilir, ancak harf hataları ve Türkçe karakter duyarlılıkları esnekleştirilerek doğru tahminlerin kaçırılmaması sağlanır. - Doğru tahmin algılandığı anda oyun motoru chate yazan izleyiciyi tespit eder, puanını günceller ve arayüzde doğru bildiğine dair görsel efekti (başarı animasyonu ve ses efekti) tetikler.
P2P Ağ Topolojisi (Host-Client Modeli)
Tek oyunculu (klasik) modun yanı sıra, chate karşı chatin yarıştığı veya iki yayıncının karşı karşıya geldiği çok oyunculu modlarda WebRTC (PeerJS) tabanlı bir Host-Client (Kurucu-Katılımcı) topolojisi devrededir:
- Host (Yayıncı Kurucu Node): Odayı ilk oluşturan yayıncı, oyunun durum yöneticisi (Host) olur. Kelimelerin belirlenmesi, sürelerin kontrolü ve doğru yanıtların tescillenmesi Host'un tarayıcısında yürütülür.
- Client (Rakip Peer): Oda koduyla bağlanan rakip yayıncı veya oyuncu, Host ile doğrudan bir
RTCDataChannelbağlantısı açar. - Sinyalleşme (Signaling): Kurucu ve katılımcının IP/Port bilgilerini paylaşabilmesi amacıyla PeerJS sinyalleşme sunucusu kullanılır. P2P tünel açıldıktan sonra veri alışverişi doğrudan tarayıcılar arasında sıfır gecikmeyle sürdürülür.
Gerçek Zamanlı Veri Senkronizasyonu (Data Sync)
Oyun boyunca gerçekleşen tüm aksiyonlar RTCDataChannel paketleri ile uçtan uca senkronize edilir:
SYNC_STATE: Host, her kelime değişiminde veya puan güncellemesinde oyun durumunu milisaniyelik zaman damgaları (hostNow) ile birlikte istemciye gönderir.GUESSED_CORRECTLY: Bir chat kullanıcısı doğru tahmin yaptığında, bu durum tüm istemcilerde aynı anda duyurulur ve puan tablosu güncellenir.CHAT_MSG: Alınan sohbet mesajları, tarafların ekranlarındaki sanal chat paneline senkronize bir şekilde yansıtılır.TABOO_PRESSED/SKIP_WORD: Anlatıcının yasaklı kelime kullanması veya pas geçmesi durumunda gönderilen sinyallerdir.
Oda Mantığı ve Oturum Yönetimi
Her oyun oturumu 6 haneli benzersiz bir oda koduyla yönetilir:
- Oda Kodu: `paira-chattabu-[ROOMCODE]` formatında bir Peer ID üretilerek tarafların birbirini bulması sağlanır.
- Bağlantı Kesintileri:
onPlayerLeftolayı ile rakibin odadan düşmesi durumunda oyun otomatik olarak duraklatılır ve durum kurtarma aşamasına geçilerek oturumun kilitlenmesi engellenir.
Güvenlik ve Veri Gizliliği
Chat Tabu, WebRTC protokolünün sağladığı uçtan uca şifreli (End-to-End Encrypted - DTLS/SRTP) veri kanallarını kullanır. Yayıncıların veya izleyicilerin hiçbir sohbet verisi ya da IP adresi herhangi bir sunucuya kaydedilmez. Tüm işlemler doğrudan tarayıcı belleğinde gerçekleştiği için veri güvenliği ve hız maksimum seviyede tutulur.
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.