Skocz do zawartości
Masz już aplikację Sharegon?

Odkryj wszystkie możliwości. Dowiedz się więcej

Sharegon.pl

Zainstaluj aplikację Sharegon i korzystaj z powiadomień push oraz licznika nowych aktywności bezpośrednio z ekranu głównego.

Aby zainstalować tę aplikację na iOS i iPadOS.
  1. Tap the Share icon in Safari
  2. Przewiń menu i stuknij Dodaj do ekranu początkowego.
  3. Stuknij Dodaj w prawym górnym rogu.
Zainstaluj aplikację Sharegon na Androidzie
  1. Otwórz Sklep Google Play na swoim smarfonie.
  2. Wyszukaj „Sharegon” w pasku wyszukiwania.
  3. Stuknij „Zainstaluj”, aby pobrać aplikację.

Naprawa błędu obliczania rozmiaru pakietu 'HEADER_GC_QUEST_INFO'

Nieaktywny

Featured Replies

Opublikowano

image.png.a144663d4007d16872d3413c4a1a8bf3.png

 

Cześć,

 

W tym temacie przedstawię proste i klarowne rozwiązanie błędu związanego z niepoprawnym rozmiarem pakietu 'HEADER_GC_QUEST_INFO'. Ten problem sprawiał, że klient otrzymywał pakiet o niewłaściwej wielkości, co mogło skutkować awarią klienta lub błędnym wyświetlaniem danych.

 

Rozwiązanie:

Poprawiłem funkcję 'SendQuestInfoPakcet', dzięki czemu rozmiar pakietu 'qi.size' automatycznie aktualizuje się podczas zapisywania danych do bufora. To gwarantuje, że rozmiar pakietu jest zawsze odpowiedni.

 

Wprowadzone ulepszenia:

  • Połączyłem dwie instrukcje assert() w jedną, dla lepszej czytelności.
  • Użyłem listy inicjalizacyjnej do tworzenia struktury qi.
  • Stworzyłem bezpieczną funkcję lambda WriteToBuffer do zapisu danych w buforze.
  • Dodałem logi z precyzyjnymi informacjami o zapisanych danych.

 

Implementacja:

📂 Lokalizacja pliku: 'game -> questpc.cpp'

 

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

1. Skonsolidowanie instrukcji assert():

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

♻️ Zamień

🔐 Ukryta Treść 🔐

 

 

2. Lista inicjalizująca

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

♻️ Zamień

🔐 Ukryta Treść 🔐

 

 

3. Funkcja WriteToBuffer():

Wcześniej zapisywaliśmy strukturę do bufora na początku funkcji. To było błędne, bo powodowało nieprawidłowe obliczenie rozmiaru pakietu. Aby to naprawić, wprowadzimy nową funkcję lambda WriteToBuffer, która aktualizuje rozmiar pakietu dynamicznie po każdym zapisie do bufora. Dzięki temu rozmiar pakietu będzie zawsze zgodny z aktualnymi danymi. Funkcja WriteToBuffer również poprawia obsługę zapisu danych i zapewnia, że nie przekroczymy zarezerwowanego rozmiaru bufora. Jest to ważne, bo zapewnia integralność pakietów. Dodatkowo poprawiliśmy logi, żeby wyświetlały dokładną ilość zapisanych danych. Dzięki temu będzie łatwiej sprawdzić, co zostało zapisane w pakiecie.

 

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 ♻️ Zamień

🔐 Ukryta Treść 🔐

 

 

4. Aktualizacja warunków:

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

Wcześniej, żeby wysłać flagę "QUEST_SEND_ISBEGIN", najpierw zapisywano ją do bufora, a potem zwiększano rozmiar pakietu o 1.

 

   ♻️ Zamień

🔐 Ukryta Treść 🔐

 

Nowa wersja działa tak samo, ale rozmiar pakietu zwiększa się o faktyczny rozmiar flagi, który jest zwracany przez funkcję sizeof()

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

Wcześniej, żeby wysłać tytuł zadania, najpierw zarezerwowano miejsce na 31 znaków w buforze. To nie było bezpieczne, bo mogło dojść do przekroczenia buforu

 

 ♻️ Zamień

🔐 Ukryta Treść 🔐

 

Teraz, żeby wysłać tytuł zadania, najpierw obliczamy jego rzeczywisty rozmiar, używając funkcji sizeof(). Następnie używamy funkcji WriteToBuffer() do bezpiecznego zapisania tytułu do bufora. Funkcja WriteToBuffer() ogranicza rozmiar tytułu do 31 znaków, co zapobiega przekroczeniu buforu.

 

5. Zastosujmy pozostałe warunki

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

♻️ Zamień

🔐 Ukryta Treść 🔐

 

 

6. Wysyłanie pakietu

Wcześniej pakiet był wysyłany za jednym razem, łącznie ze strukturą 'qi' i danymi z bufora. Funkcja Packet() wysyła wszystkie dane z bufora do klienta.

 

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 ♻️ Zamień

🔐 Ukryta Treść 🔐

 

W nowej wersji najpierw wysyłana jest struktura 'qi', a następnie dane z bufora. Funkcja BufferedPacket() wysyła dane do bufora, który jest następnie wysyłany do klienta funkcją Packet().

  • 2 miesiące temu...
  • 4 tygodnie później...
  • 1 miesiąc temu...
Opublikowano

ciekawi mnie gdzie byl blad dlatego pisze komentarz, zeby to sprawdzic

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Konto

Nawigacja

Skonfiguruj powiadomienia push w przeglądarce.

Chrome (Android)
  1. Stuknij ikonę kłódki obok paska adresu.
  2. Wybierz Uprawnienia → Powiadomienia.
  3. Dostosuj swoje preferencje.
Chrome (Desktop)
  1. Kliknij ikonę kłódki na pasku adresu.
  2. Wybierz Ustawienia witryny.
  3. Znajdź Powiadomienia i dostosuj swoje preferencje.