Sıfırdan Altyapı Filesi 64bit'e Çevirme - Geliştirme Günlüğü

Whistle

Ruhsuz :/
Kurucu
Geliştirici
Yardımsever Üye
Mesaj
12.453
Çözümler
580
Beğeni
16.637
Puan
6.281
Ticaret Puanı
2
2020 yılında kraizy dosyalarını kullanarak sıfırdan files hazırlamayı ve güncel sürümlere yükseltmeyi göstermiştim. Her şeyi en ince detayına kadar anlatmak o süreçte çok yorduydu beni ancak buna kesinlikle değdi :)
Metin2 Sıfırdan Altyapı Server Files Hazırlama Rehberi

Daha sonra baştan öğrenmek yerine final dosyaları direkt kurup kendi filesini geliştirmek isteyenler için 2021 yılında dosyaları paylaşmıştım.
MMO Tutkunları Metin2 Altyapı Server Files


Ayrıca ilgili içeriklerin tarihini göz önünde bulundurursanız o dönemler yapay zeka araçları olmadığı için doğru bilgiye erişmek ve ne aradığını bulmak için hem tecrübe gerektiriyordu hem de vakit alıyordu. Artık yapay zeka araçları sağ olsun işimizi çok hızlandırıyor. Bu yüzden ilgili içeriklerin ne kadar kapsamlı olduğunu değerlendirirken bunu lütfen gözardı etmeyi unutmayın.


Ufak notumu da paylaştıktan sonra devam ediyorum. Sonraki süreçte artık asıl hedefimi gerçekleştirdiğim ve bu işlerden sıkıldığım için artık bırakmıştım. Zaten üniversiteye başlamıştım ve daha sonra iş vs derken kalan vaktimi sadece forum sitemize ve forum sitemize bağlı projelere ayırmıştım. Hâlâ birçok kişi bu içerikleri ziyaret ettiği için başta bir güncelleme daha atmayı planladım fakat sonradan geçmişte 64bit için başlangıç yaptığımı ve yarıda bıraktığımı fark ettim. Bu yüzden son kez olmak üzere tekrardan bu işlere dalarak projeyi 64bite yükseltmeye karar verdim.

Zaten 32bit sistemlere olan desteğin yakında kalkabileceğini düşünüyorum bu yüzden 64 bite yükseltme yapmayı düşünüyorum. Henüz bunun için sıfırdan altyapı files 2. sezon şeklinde videolu rehber hazırlama konusunda kararsız kalsam da en azından yazılı olarak adım adım hangi aşamalardan geçtiğimi bu geliştirme günlüğünde paylaşmayı düşünüyorum. Süreç hızlı ilerlemeyecek vakit buldukça ve bu işle uğraşmak için enerjim oldukça devam edeceğim. Umarım bitirebilirim. Ayrıca bu geliştirme günlüğünü her türlü yoruma açık bırakıyorum. Öneri, eleştirilerinizi yazabilirsiniz. Saygılarımla
 
2021 yılından bu yana birçok yeni güncellemeler geldiği için 64bit işlemlerine başlamadan önce Extern güncellemesi yaptım.
FreeBSD 14.2 gcc15 ile derleme aldım. c++11 standartından c++26 geçiş yaptım. Bu süreçte 3 tane hata aldım. Bu hataları düzelttim.

ServerSource 'de şu güncellemeler yapıldı;
  • boost 1.73.0 -> 1.89.0
  • devil 1.7.8 -> 1.8.0
  • cryptopp 8.2.0 -> cryptopp 8.9.0
  • gcc9 -> gcc15
  • c++11 -> c++26

Serveri açarken db'de şöyle bir uyarı ile karşılaştım. Bunun desteği komple kalkmadan düzelteceğim. (MySQL 8.0 kullanıyorum)
WARNING: MYSQL_OPT_RECONNECT is deprecated and will be removed in a future version.

Bir sonraki aşamada Client güncellemesi yapacağım.
 
Son düzenleme:
Vay be.. sahalara geri döndün demek.
Neyse bitirdiğinde yollarsın artık o kadar mesaimiz var. Beleş ve hazır olunca ayrı bi güzel oluyor.
 
Vay be.. sahalara geri döndün demek.
Neyse bitirdiğinde yollarsın artık o kadar mesaimiz var. Beleş ve hazır olunca ayrı bi güzel oluyor.
64bit'e geçirmeden önceki son halini yayınlayacağım. Sonraki süreç ne kadar sürer emin değilim, vakit buldukça devam edeceğim. İşin komik yanı bilgi tazelemek için kendi videolarıma bakıyorum :x
 
Şimdiden kolay gelsin. Öneri olarak tam bir geliştirme ortamı hazır paylaşabilirseniz çok güzel olur. Yani hem windows hem freebsd olarak.( metin2 artık modern bir motora taşımanın vakti geldi.)
 
Uzun süren buildleri beklerken bir yandan bazı düzenlemeler yaptım. MySQL 8.0 sürümü kullanıyorsanız oyunu açtığınızda şöyle bir uyarı ile karşılaşacaksınız;
WARNING: MYSQL_OPT_RECONNECT is deprecated and will be removed in a future version.

Bu şuan için bir problem oluşturmasa da gelecekteki MySQL sürümlerinde kalkacağı için artık derlenemez hale gelecekti. Bu yüzden geleceğe yatırım olması bakımından bunu düzeltmeye karar verdim. Peki bu nedir?

Veritabanında işlem yapmak için sorgu gönderdiğimizde eğer bağlantı kopmuşsa MySQL'un bize verdiği C API sayesinde otomatik olarak bağlanmasını sağlıyor. Ancak şu tarz durumlarda veri kaybı yaşanacağı için gelecek sürümlerde kaldırmayı düşünüyorlar;
  • TRANSACTION
  • session variables (karakter seti vb.)
  • temporary tables

Bu sebepten ötürü bağlantı kopmalarını denetlemek ve tekrardan bağlanmak için artık MySQL'un gelecekteki sürümlerinde sorgu gönderildiğinde bağlantı kopmuşsa otomatik olarak bağlanmayacak. Bu yüzden geliştiricinin kendi uygulamasında bağlantı kontrolünü yapması gerekecek.

Mevcut kaynak kodunda her query işleminde eğer tekrardan bağlandıysa karakter setini tekrardan tanımlar. Örnek kod;
C++:
Genişlet Daralt Kopyala
            if (m_ulThreadID != mysql_thread_id(&m_hDB))
            {
                sys_err("MySQL connection was reconnected. querying locale set");
                while (!QueryLocaleSet());
                m_ulThreadID = mysql_thread_id(&m_hDB);
            }
Yukarıdaki kod sayesinde sorun çıkmamasına rağmen gelecek sürümde MYSQL_OPT_RECONNECT desteği kalkacağı için mecburen düzenleme yapmak gerekecek.

WARNING: MYSQL_OPT_RECONNECT is deprecated and will be removed in a future version.
Bu uyarıya sebep olan kodumuz Server/libsql/AsyncSQL.cpp dosyasındaki CAsyncSQL::Connect fonksiyonunda bulunuyor;
C++:
Genişlet Daralt Kopyala
    bool reconnect = true;

    if (0 != mysql_options(&m_hDB, MYSQL_OPT_RECONNECT, &reconnect))
        fprintf(stderr, "mysql_option: %s\n", mysql_error(&m_hDB));

    fprintf(stdout, "AsyncSQL: connected to %s (reconnect %d)\n", m_stHost.c_str(), m_hDB.reconnect);

Bu kod artık işlevini yitirmiştir. MySQL'a sorgu gönderdiğimiz yerde bağlantı kontrolünü yapıp tekrardan bağlanmamız gerekecek. Bunun için şu yöntemi kullandım. Eğer sorgu başarısız olmuşsa bağlantıyı tekrar kurmasını sağladım. Oyunu başarıyla açabildim ve oyuna giriş yapabildim.
MYSQL_OPT_RECONNECT uyarısı kalkmış hali.webp

Neyseki kaynak kodunda tüm sorguların işlemleri tek bir yerden organize edildiği için gelecekteki MySQL sürümleri için uyarlamak için projenin tamamındaki kodlara müdahale etmeme gerek kalmadı. Bu yüzden kısa sürdü. Ayrıca henüz yeni yaptığım değişiklikleri geniş çaplı test etmediğim için şimdilik paylaşmıyorum. Süreç tamamlandığında rehber konusu oluşturacağım.
 
Son düzenleme:
Metin2 geliştirmeye youtube ve udemydeki derslerinizle başlamıştım temelleri orada atmaya başladım anlamaya başladım sayenizde buralardayız diyebilirim. Başladığınız süreç beni çok mutlu etti uzun ve buram buram emek kokan bu rehberlerinizi tekrar görmek sevindirici. Elinize emeğinize sağlık teşekkür ederiz katkılarınız için. Heyecanla takipteyimmm <3 :)
 
C++26 msvc'de fully supported mu? Kaynağı c++26'ya geçiricem derken windows desteğini kaybetmeyelim
 
Güncelleme;
Bugün Client üzerinde uğraştım. ServerFiles'de olduğu gibi Client kütüphanelerini de güncelledim.

Güncellenenler;
  • boost 1.73.0 -> 1.89.0
  • cryptopp 8.2.0 -> cryptopp 8.9.0
  • libjpeg-9d -> libjpeg-turbo-3-1-2 (libjpeg artık libjpeg-turbo adıyla geliştirilmeye devam ediliyor. Bunun içerisinde libjpeg-static ve turbo-jpeg olmak üzere iki tane mevcut. libjpeg-static kullanmaya devam ettim)
Hala güncel olanlar;
  • lzo-2.10
  • Devil 1.8.0
Visual Studio 2022 ile clienti build aldım. Artık MMO Tutkunları Sıfırdan Altyapı Server Files güncellenmiş oldu.

Yakın zamanda buraya kadar yaptığım işlemleri anlattığım mini bi videolu rehber ve final dosyaları paylaşılacak.

1005_015624.webp
 
Son düzenleme:
Server filesin windows sürümünü yakın zamanda yapmayı planlamıyorum, eğer yaparsam umarım o zamana kadar destek gelir. Uğraşacağım zaman destek gelmezse windows için sürümü düşürürüm
2026'ya yaklaşırken yalnızca freebsd de debug edilebilen bir server benim fikrimce kullanışsız olacaktır :(
 
2026'ya yaklaşırken yalnızca freebsd de debug edilebilen bir server benim fikrimce kullanışsız olacaktır :(
Öneriniz için teşekkür ederim. Bu yola 64bit için çıktım. Server filesin windows desteği için gelen öneriler olduğu için üzerinde çalışacağım
 
Güncelleme;
Bugün oyuna giriş yaptıktan sonra ve sağ olsun üyelerimiz windows server files diye diye beni darladığı için ufaktan ön hazırlık yapmak ve batch script yazmayı öğrenmek için altyapı server filesi otomatik oluşturduğumuz gen.sh dosyasını windows için gen.bat olarak yazmaya karar verdim.

Bu konuda yalan söylemeyeceğim kesinlikle. Başta aşırı tembellik ettim. Bu yüzden yapay zekaya shell scriptinin tamamını verip batch haline çevirmesini istedim ancak hiçbiri düzgün çalışmadı. Bende batch script syntaxlarına göz gezdirdikten sonra 2 saat gibi bir süre ile server filesi oluşturan scripti yazdım.

Bu ekran görüntüsü windows server için sürekli yorum atanlar için ;) @sauber @cosion
game ve db'yi windows için build almadan önce server files kısmını aradan çıkarttım en azından :ROFLMAO:

MMO Tutkunları Altyapı Server Files Windows için oluşturma scripti .webp
 
Güncelleme;
Bugün oyuna giriş yaptıktan sonra ve sağ olsun üyelerimiz windows server files diye diye beni darladığı için ufaktan ön hazırlık yapmak ve batch script yazmayı öğrenmek için altyapı server filesi otomatik oluşturduğumuz gen.sh dosyasını windows için gen.bat olarak yazmaya karar verdim.

Bu konuda yalan söylemeyeceğim kesinlikle. Başta aşırı tembellik ettim. Bu yüzden yapay zekaya shell scriptinin tamamını verip batch haline çevirmesini istedim ancak hiçbiri düzgün çalışmadı. Bende batch script syntaxlarına göz gezdirdikten sonra 2 saat gibi bir süre ile server filesi oluşturan scripti yazdım.

Bu ekran görüntüsü windows server için sürekli yorum atanlar için ;) @sauber @cosion
game ve db'yi windows için build almadan önce server files kısmını aradan çıkarttım en azından :ROFLMAO:

25962 eklentisini görüntüle
Eline sağlık, ben windows'u sadece geliştirme ortamı olarak kullanıyorum o yüzden bunların hiç birini yapmadım :D, server files kısmını freebsd'de oluşturulan directory'den kullanıyor ufak tefek linkler için aşağıdaki eklentiyi kullanmıştım:

 
2021 yılından bu yana birçok yeni güncellemeler geldiği için 64bit işlemlerine başlamadan önce Extern güncellemesi yaptım.
FreeBSD 14.2 gcc15 ile derleme aldım. c++11 standartından c++26 geçiş yaptım. Bu süreçte 3 tane hata aldım. Bu hataları düzelttim.

ServerSource 'de şu güncellemeler yapıldı;
  • boost 1.73.0 -> 1.89.0
  • devil 1.7.8 -> 1.8.0
  • cryptopp 8.2.0 -> cryptopp 8.9.0
  • gcc9 -> gcc15
  • c++11 -> c++26

Serveri açarken db'de şöyle bir uyarı ile karşılaştım. Bunun desteği komple kalkmadan düzelteceğim. (MySQL 8.0 kullanıyorum)


Bir sonraki aşamada Client güncellemesi yapacağım.
kolay gelsin şimdiden hocam fakat gcc yerine clang daha mantıklı değil mi? yapı olarak protobuff ve x64 clang kullanıyorum gcc yerine clang daha mantıklı gelmişti
 
kolay gelsin şimdiden hocam fakat gcc yerine clang daha mantıklı değil mi? yapı olarak protobuff ve x64 clang kullanıyorum gcc yerine clang daha mantıklı gelmişti
64bit çalışmaları öncesinde filesi güncellemem gerekiyor. Şu ana kadar yaptığım her şey 32bit üzerinde çalışmalarım. Client'i c++23 e yükseltmekle uğraşıyorum şu an

protobuff un bir ilgisi yok fakat gcc yerine clang kullandım derleme olarak tek ilgisi bu keza x forumunda konuda açmıştım oradan araştırıp ufakta olsa bakabilirsin
Burada da paylaşın :)

Allah kolaylık versin kanser madde yükleniyor :)
Teşekkür ederim..

Eline sağlık, ben windows'u sadece geliştirme ortamı olarak kullanıyorum o yüzden bunların hiç birini yapmadım :D, server files kısmını freebsd'de oluşturulan directory'den kullanıyor ufak tefek linkler için aşağıdaki eklentiyi kullanmıştım:

Bilgi için teşekkür ederim. Shell scriptlerini batch için tekrar yazınca artık files Windows'da çalışır hale geldi. Hala game ve dbyi windows için derlemem gerekecek. Şu an client ile uğraşıyorum bitirdiğimde ona da bakacağım
 
Son düzenleme:
Geri
Üst