Aeldra'nın filesini incelerken içerisinde protobuf diye bir olay gördüm ve bunu internet üzerinde bi kaç araştırma yaptım ve anladığım kadarıyla google'nın bir packet gönderme sistemi olduğunu hızlı bir yapı olduğunu öğrendim.
Bunu metin2'ye uyarlamışlar ve paket hatalarını en aza indirgemişler bu sistemi kendi dosyalarıma nasıl entegre edebilirim daha önce kullanan oldu mu yardımcı olabilir misiniz ve avantajları ve dezavantajları nelerdir?
Protobuff google tarafından geliştirilmiş, yapılandırılmış verileri serileştirmek ve iletmek için kullanılan bir protokol. Metin2de bir nevi paket boyutunu düşürerek ağ trafiğini azaltır ve geniş bant sağlar. Ayrıca .proto dosyasını program kendisi oluşturduğu için paket hatasını azaltır. Fakat bunu yapabilmen için bütün paket bilgilerine sahip olman gerekir yoksa hataları çözmek zor olur. Bunu yapmadan önce protobuff ile ilgili tutorial videoları izlersen rahatça uyarlayabilirsin. Ayrıca source içindeki protobuffa ait cpp ve .h dosyaları elle yazılmıyor onu protobuff kendisi üretiyor. senin yapman gereken tek şey protobuffa hangi paketlerin iletileceğini belirlemek. Aeldra filesi içerisinde protobuffı masaüstüne alıp inceleyebilirsin. Gördüğün üzere paketlerdeki ve item dataları filan bu şekilde ayarlanıyor
Protobuff google tarafından geliştirilmiş, yapılandırılmış verileri serileştirmek ve iletmek için kullanılan bir protokol. Metin2de bir nevi paket boyutunu düşürerek ağ trafiğini azaltır ve geniş bant sağlar. Ayrıca .proto dosyasını program kendisi oluşturduğu için paket hatasını azaltır. Fakat bunu yapabilmen için bütün paket bilgilerine sahip olman gerekir yoksa hataları çözmek zor olur. Bunu yapmadan önce protobuff ile ilgili tutorial videoları izlersen rahatça uyarlayabilirsin
Bu protobuffu tam olarak nasıl kullanabilirim tam anlamış değilim açıkcası
Yapay zekaya biraz danıştım az çok oturdu kafamda fakat bir örnek olsa daha güzel olurdu
şimdi bu sistemi entegre işleminde nasıl bir yol izlemeliyim 1 adet paketi buraya aktarabilsem diğer paketleri uyarlarım.
Aeldranın yapısına biraz baktım cg ve gc olarak ayırmış paketleri ve oyundaki verileri (player,pet,item,vb) bir kategori yapmış ayrı tutmuş
bende aynı tarz yapmak istiyorum aslında ve bu işlemi herkesin yapması gerektiğini düşünüyorum artık eski packet yapısını değiştirmemiz gerektiğini düşünüyorum
Yardımlarınızı bekliyorum bu işlemi gerçekleştirip foruma kazandırmamız lazım bence
Bu protobuffu tam olarak nasıl kullanabilirim tam anlamış değilim açıkcası
Yapay zekaya biraz danıştım az çok oturdu kafamda fakat bir örnek olsa daha güzel olurdu
şimdi bu sistemi entegre işleminde nasıl bir yol izlemeliyim 1 adet paketi buraya aktarabilsem diğer paketleri uyarlarım.
Aeldranın yapısına biraz baktım cg ve gc olarak ayırmış paketleri ve oyundaki verileri (player,pet,item,vb) bir kategori yapmış ayrı tutmuş
bende aynı tarz yapmak istiyorum aslında ve bu işlemi herkesin yapması gerektiğini düşünüyorum artık eski packet yapısını değiştirmemiz gerektiğini düşünüyorum
Yardımlarınızı bekliyorum bu işlemi gerçekleştirip foruma kazandırmamız lazım bence
bunu incelemeni öneririm durum hakkında bilgi edinmeni sağlayacaktır. Ayrıca Aeldra'nın src dosyasında skill.cpp 157. satırda kullanımla ilgili şeyleri göreceksin
Aeldra protobuf yapısını inceledim baya bi üstünden geçtim.
Protobuf klasörü içerisinde Client <-> Game-Server - Game-Server <-> Game-Server - Game-Server <-> DB-Server şeklinde 3 farklı yapı olduğu için her bir işlem grubu için bir .hproto dosyası oluşturmuş ve bunların içerisine yukarıdaki yapıya uygun şekilde paket isimlerini tutmuş.
Paket için gerekli olan isim kısımlarını burada tutmuş örnek :Client > Game-Server için şu şekilde HANDSHAKE => (burası dahil ettiği dosya ismi kısaltmış)cgps.CGHandshakePacket buradaki CGHandshakePacket ismini de cgps olarak adlandırdığı dosyadan çektirmiş orada ise şu şekilde tanımlanmış :
Geri kalan dosyaları protobuf kendisi oluşturuyor zaten packet sisteminde ki hatayı azaltan kısım burası zaten kendisi yaptığın ayarlamaya göre oluşturuyor.
Server tarafında kullanırken de şu şekilde yapmış :
Aeldranın yaptığı işlem void CInputProcessor::Handshake(LPDESC d, std::unique_ptr<CGHandshakePacket> p)
orjinal hali void CInputProcessor::Handshake(LPDESC d, const char* c_pData)
Aeldra else if (header == TCGHeader::HANDSHAKE)
Handshake(d, packet.get<CGHandshakePacket>());
orjinal else if (bHeader == HEADER_CG_HANDSHAKE)
{
Handshake(d, c_pData);
}
header fonksiyonlarında bir kaç değişiklilik yapılmış header ve bHeader değişmiş ve bunu yeni sisteme geçirdiği için yapmış TCGHeader::HANDSHAKE fonksiyonu ise yukarıda anlattıgım HANDSHAKE =>cgps.CGHandshakePacket kısmından çekiyor bu kısımda
burda değerleri alıyor ve diğer işlemleri protobuf hallediyor sadece src kısmında bir kaç fonksiyon ismini protobuf için güncellemek yeterli oluyor.
Biraz karışık olduğu için bu işe kalkışmayı şuanlık rafa kaldırıyorum çünkü tam kafamda oturmayan kısımlar var yeni nesil fileslerde görmek isteyeceğimiz bir işlem fakat bilen kişilerin desteği bizim için önemli ve bu işlemi forum halkına kazandırmalıyız.
Protobuf ile alakalı gereken bilgi verilmiş zaten fakat bir noktaya dikkat çekmek lazım. Bu foruma kazandırılabilecek herhangi bir sistem değil hocam, bunu sadece copy-paste ile sistem ekleyen veya herhangi bir yazılım dilini (bu durumda C++) ileri düzeyde bilmeyen birine uygulatmak ileride başına iş açmamıza sebep olur, bir sorun veya hata aldığında, sunucu canlıya çıktığında problem yaşadığında yardım alabileceği kişi sayısı normalde 50 ise bu sistemi uyguladığınız zaman 5'e düşecek, bu sebeple sistemi veya dili veya tcp paket alışverişi kavramlarını belirli bir düzeyin üstünde bilmiyorsanız bu kadar büyük değişikliklere girişmeyin, Aeldra'yı protobuf'a geçiren ekibin tamamı uzman devlerden oluşuyordu, hatırlatmak isterim, sevgiler.
lafım kimseye değil kimse yanlış anlamasın da, arkadaşlar önce oynatıcak güzel bir files yapın. sorunu olmasın, optimizasyonu güzel olsun. bir tek protobuf eksik kalsın ya. protobuf kullansanız ne olcak kullanmasanız ne olcak. aeldra gibi olunca sizde kullanırsınız. bu kadar detaylı da geliştirmeyin ya