- Mesaj
- 29
- Beğeni
- 11
- Puan
- 655
- Ticaret Puanı
- 0
İyi forumlar.
Bir süredir oyunumda yoğun olarak yaşadığım ve aslında tüm server files’larda bulunan bir takılma problemi hakkında sizlerle bazı gözlemlerimi ve çözüm önerilerimi paylaşmak istiyorum.
Örnek bir görüntü:
Bu problem, esasen server'ın client ile olan iletişiminin kopmasından kaynaklanıyor. Normal şartlarda, başarılı bir ışınlanma esnasında client, ışınlanılmak istenilen core’a handshake bilgilerini ve ardından login paketini yollar. Server da bu paketi alarak login işlemini tamamlar ve fazı PHASE_SELECT olarak değiştirir. Ardından gelen loading ve entergame işlemleriyle ışınlanma düzgünce tamamlanır.
Muhtemel seneryolar:
Ancak takılmaların yaşandığı durumlarda, genellikle server login işleminde hata vererek LoginFailure paketi döndürüyor ve sonrasında herhangi bir faz kapatma işlemi vs sağlamıyor. Bu durumda faz PHASE_LOGIN olarak kalıyor. Client ise bu loginfailure paketine, intrologin.py aşamasında olmadığı için yanıt veremiyor ve bekleme ekranında takılı kalıyor. "Hesabın zaten bağlı.", "Sunucuya bağlanırken hata." gibi popup mesajları da bu yüzden gösterilmiyor.
Daha da kötüsü, server herhangi bir PHASE_CLOSE ya da quit mesajı da göndermediği için iletişim tamamen kopuyor ve client orada kalıyor.
Bazı hata loglarında, server’ın ışınlanma sırasında cliente ALREADY LOG IN mesajıyla LoginFailure döndürdüğünü görebiliyorum. İşte tam bu noktada iletişim kopuyor ve takılma meydana geliyor. Ancak login işleminin neden sekteye uğradığı konusunda kesin bir fikrim yok.
Potansiyel çözüm önerim:
Login işlemi başarısız olduğunda, LoginFailure paketi gönderilmeden önce mevcut faz sonlandırılmalı (PHASE_CLOSE) ya da doğrudan bir reconnect mekanizması tetiklenmeli. Bu sayede client boşta kalmaz, en azından düzgün bir hata mesajı ile kullanıcıya durum yansıtılmış olur.
Bu konuda daha önce karşılaşmış, çözüm üretmiş veya teknik olarak bilgisi olan arkadaşların yorumlarını bekliyorum. Yardımcı olabilecek her türlü bilgiye açığım.
Ekleme: Bu takılma sorunu farklı sebeplerden dolayı da benzer şekilde tetiklenebilir. Ben sadece benim gözlemlediğim sebebi ve tecrübelerimi paylaşmak istedim.
Teşekkürler.
Bir süredir oyunumda yoğun olarak yaşadığım ve aslında tüm server files’larda bulunan bir takılma problemi hakkında sizlerle bazı gözlemlerimi ve çözüm önerilerimi paylaşmak istiyorum.

Linkleri görebilmek için
giriş yap veya kayıt ol.
Bu problem, esasen server'ın client ile olan iletişiminin kopmasından kaynaklanıyor. Normal şartlarda, başarılı bir ışınlanma esnasında client, ışınlanılmak istenilen core’a handshake bilgilerini ve ardından login paketini yollar. Server da bu paketi alarak login işlemini tamamlar ve fazı PHASE_SELECT olarak değiştirir. Ardından gelen loading ve entergame işlemleriyle ışınlanma düzgünce tamamlanır.

Ancak takılmaların yaşandığı durumlarda, genellikle server login işleminde hata vererek LoginFailure paketi döndürüyor ve sonrasında herhangi bir faz kapatma işlemi vs sağlamıyor. Bu durumda faz PHASE_LOGIN olarak kalıyor. Client ise bu loginfailure paketine, intrologin.py aşamasında olmadığı için yanıt veremiyor ve bekleme ekranında takılı kalıyor. "Hesabın zaten bağlı.", "Sunucuya bağlanırken hata." gibi popup mesajları da bu yüzden gösterilmiyor.
Daha da kötüsü, server herhangi bir PHASE_CLOSE ya da quit mesajı da göndermediği için iletişim tamamen kopuyor ve client orada kalıyor.
Bazı hata loglarında, server’ın ışınlanma sırasında cliente ALREADY LOG IN mesajıyla LoginFailure döndürdüğünü görebiliyorum. İşte tam bu noktada iletişim kopuyor ve takılma meydana geliyor. Ancak login işleminin neden sekteye uğradığı konusunda kesin bir fikrim yok.

Login işlemi başarısız olduğunda, LoginFailure paketi gönderilmeden önce mevcut faz sonlandırılmalı (PHASE_CLOSE) ya da doğrudan bir reconnect mekanizması tetiklenmeli. Bu sayede client boşta kalmaz, en azından düzgün bir hata mesajı ile kullanıcıya durum yansıtılmış olur.
Bu konuda daha önce karşılaşmış, çözüm üretmiş veya teknik olarak bilgisi olan arkadaşların yorumlarını bekliyorum. Yardımcı olabilecek her türlü bilgiye açığım.
Ekleme: Bu takılma sorunu farklı sebeplerden dolayı da benzer şekilde tetiklenebilir. Ben sadece benim gözlemlediğim sebebi ve tecrübelerimi paylaşmak istedim.
Teşekkürler.