10 · Geliştirme notu · Ağ katmanı

LAN kodundan oda koduna: relay'den önceki yol

Aynı Wi-Fi'de çalışan bir kod, iki farklı şehirde çalışmayınca ağ katmanı baştan düşünüldü.

FrostZero'nun ağ katmanı sıfırdan yazılmadı. Proje bu yolculuğa başlarken elde sunucu otoriteli, kendi taşıma katmanına sahip çalışan bir yapı vardı. Kuralları host'un bilgisayarı işletiyordu ve istemciler yalnız gördüklerini gösteriyordu. İş, bu yapıyı yıkmak değil sertleştirmekti.

İlk gerçek engel oda kodunda çıktı. Kod, host'un yerel ağ adresini taşıyordu. Aynı evde, aynı modemde her şey çalışıyordu; iki farklı şehirden denendiğinde bağlantı zaman aşımına düşüyordu. Ekran bunu açıkça yazıyordu bile: bu bir yerel ağ kodu, farklı şehirden bağlanmak için başka bir yol gerekiyor.

İlk düşünülen yol port yönlendirmeydi ve hızla elendi. Türkiye'de operatörlerin yaygın olarak kullandığı paylaşımlı adres yapısı port açmayı güvenilmez kılıyor, sabit adres ek ücretli bir hizmet. Oyuncudan modem ayarlarını değiştirmesini istemek de kabul edilebilir bir şey değildi.

İkinci yol bir ağ üstü ağ kurmaktı: host ve misafirler aynı sanal ağa girince oda kodu kendiliğinden o ağın adresini taşıyordu. Bu çözüm çalıştı ama herkesin bir program kurmasını gerektiriyordu. Üçüncü yol bir tünel servisiydi; oda koduna yeni bir tip eklendi ve kod artık yerel adres yerine tünel bilgisini taşıyabiliyordu.

Bu arada ağ katmanının kendisi sıkılaştırıldı. Aynı karar iki kez işlenemesin diye istem sıra numarası geldi, dağıtım tohumunu ve masa büyüklüğünü artık sunucu belirliyor, farklı sürümlerin aynı masaya oturması reddediliyor, kopan oyuncunun koltuğu bir süre saklanıyor. Bir dalga boyunca bir rövanş donması kovalandı ve kök neden yine ağda çıktı: sunucu, karakter seçimi sürerken gelen bir hazır paketini düşürüyordu.

Bu notun anlattığı yol, bugünkü Cardlab relay'ine varan yolun öncesi. Bir şeyi bilerek yapmadık: kopan bağlantının geri alınması ve host göçü bu aşamada yok. Bağlantısı düşen oyuncunun koltuğunu bot devralıyor, host çıkarsa masa kapanıyor. Bu, kapalı Alpha için kabul edilmiş bir sınır ve yol haritasında duruyor.