Geliştirici Notları: Chat ÇizBil (Gartic)
Giriş ve Mimari Yaklaşım
Chat ÇizBil (Gartic), Twitch ve Kick yayıncılarının izleyicileriyle tam entegrasyonlu ve canlı etkileşim kurarak oynayabileceği, istemci tarafında (Client-Side) çalışan bir çizim ve kelime tahmin oyunudur. Geleneksel çok oyunculu oyunların aksine, Chat ÇizBil herhangi bir merkezi sunucu, veritabanı veya kullanıcı hesabı kaydı gerektirmez. Tüm oyun mantığı, çizim yakalama ve tahmin değerlendirme algoritmaları doğrudan yayıncının tarayıcısında yürütülür.
Yayıncı tarayıcı ekranında kelimesini seçip çizimini yaparken, izleyiciler canlı sohbet kanalı üzerinden tahminler gönderir. Sistem, gelen mesajları anlık olarak tarayarak doğru tahmini yapan kullanıcıyı tespit eder ve liderlik sıralamasını günceller.
Canlı Yayın Platformları ve Sohbet Entegrasyonu
Yayıncıların sohbet akışını gerçek zamanlı ve minimum gecikmeyle dinleyebilmek için ChatListener sınıfı altında iki farklı platform entegrasyonu mevcuttur:
- Twitch IRC Bağlantısı: Twitch sohbet kanalı, doğrudan tarayıcı üzerinden
wss://irc-ws.chat.twitch.tv:443WebSocket adresine anonim olarak bağlanır.PASS SCHMOOPIIEve rastgele oluşturulmuşjustinfanXXXXrumuzu ile kimlik doğrulaması yapılır. Gelen ham IRC paketleri parse edilerekPRIVMSGmesajlarının içinden kullanıcı adı (display-name) ve mesaj içeriği süzülür. - Kick Pusher Bağlantısı: Kick platformunun Cloudflare korumalarını aşmak için, yayıncı öncelikle özel bir Google Cloud Function (
getKickInfo) endpoint'ine istek atar. Bu endpoint'ten gelen kanal ID'si (chatroom_id) ve Pusher kimlik bilgileri alındıktan sonra,wss://ws-[cluster].pusher.comsunucusuyla WebSocket bağlantısı kurulur. Sistem,chatrooms.[chatroom_id].v2kanalına abone olarak chat mesajlarınıApp\Events\ChatMessageEventüzerinden anlık olarak dinler.
WebRTC ve Çizim Senkronizasyonu (DataChannel Altyapısı)
Çizim tahtası üzerindeki tüm fırça darbeleri, doldurma (fill) algoritmaları, şekil çizimleri (kare, daire, çizgi) ve temizleme/geri alma işlemleri HTML5 Canvas API ve 2D render bağlamı (CanvasRenderingContext2D) kullanılarak AdvancedDrawingBoard modülüyle yönetilir.
Uygulamanın çok düğümlü (multi-node) eş zamanlı modlarında, çizim verileri (koordinatlar, renk kodları, fırça kalınlığı, çizim araçları) ve oyun durum bilgileri WebRTC (Web Real-Time Communication) protokolünün sunduğu düşük gecikmeli RTCDataChannel paketi (DRAW_EVENT, CLEAR_CANVAS vb.) üzerinden Host-Client topolojisiyle doğrudan peer-to-peer olarak senkronize edilir. Bu sayede sunucu tarafında hiçbir çizim tamponu tutulmadan, tüm çizim vektörleri doğrudan katılımcıların ekranlarında milisaniyeler içerisinde çizdirilir.
Fuzzy Matcher ve Tahmin Eşleme Algoritması
İzleyicilerin klavye hatalarını (typo) tolere etmek ve doğru tahmini adil bir şekilde tespit etmek için FuzzyMatcher ve normalizeTurkishChars algoritmaları entegre edilmiştir:
- Normalizasyon: Gelen her mesaj ve hedef kelime öncelikle küçük harfe çevrilir, Türkçe karakterler (ç, ğ, ı, ö, ş, ü) standart karakterlere (c, g, i, o, s, u) dönüştürülür.
- Levenshtein Mesafesi & Benzerlik: Mesaj içeriği ile hedef kelime arasındaki benzerlik, FuzzyMatcher motoruyla ölçülür. Yapılan harf hataları ve yakınlık skoru (maksimum mesafe toleransı
1.2olarak set edilmiştir) değerlendirilerek kelimenin doğru bilinip bilinmediğine karar verilir. - Liderlik Tablosu: Doğru tahmini ilk yapan oyuncunun hanesine 1 puan eklenir ve skorlar Javascript belleğinde güncellenerek sıralı bir şekilde liderlik tablosuna basılır.
Oda Mantığı, Güvenlik ve E-E-A-T
Oyun tamamen sunucusuz (Serverless) yapıda kurulduğu için yüksek seviyede güvenlik ve kullanıcı gizliliği sağlar:
- Veri Güvenliği: Kullanıcının IP adresleri, canlı sohbet mesajları, puan bilgileri veya yayıncı tercihleri hiçbir harici veritabanına kaydedilmez. Tüm veri alışverişi tarayıcı belleğinde ve uçtan uca şifrelenmiş TLS/SSL WebSocket kanalları üzerinde akar.
- Oturum Yönetimi: Seçilen platform ve kanal adı
sessionStoragenesnesinde tutularak sayfa geçişlerinde oturum durumu korunur. - Hata Yönetimi ve Tolerans: Sohbet bağlantısında kopma yaşanması halinde
ChatListener'ınonClosecallback'i tetiklenir, yayıncı arayüzde uyarılır ve otomatik yeniden bağlanma/hata durum yönetimi yürütülür.
Bu teknik dokümantasyon, tarayıcı tabanlı sohbet entegrasyonlu ve eş zamanlı oyun geliştirme mimarilerini incelemek isteyen geliştiriciler için profesyonel bir referans kılavuzu olarak hazırlanmıştır.