Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Problem z dodaniem metody do klasy Packet (G2O v.0.1.0)
#1
Witam, ostatnio myślałem nad dodaniem metody w squirrelu do klasy Packet, która automatycznie określałaby z jakiej metody skorzystać do zapisania Int'a na jak najmniejszej ilości bitów. Niby wszystko fajnie, pięknie, lecz przy próbie wywołania metody następuje crash, poniżej załączam screen z błędem:

[Image: vcnlq7N.png]

Tu fragment kodu testowego, po którym crashuje:

Squirrel Script
  1. packet <- Packet()
  2. packet.writeInt(1)



Squirrel Script
  1. function Packet::writeInt(value)
  2. {
  3.     if (typeof(value) == "integer")
  4.     {
  5.  
  6.         if (value >= 0)
  7.         {
  8.             if (value >= 0 && value <= 255)
  9.             {
  10.                 Packet.writeUInt8(value)
  11.             }
  12.             else if (value >= 256 && value <= 65535)
  13.             {
  14.                 Packet.writeUInt16(value)
  15.             }
  16.             else if (value >= 65536)
  17.             {
  18.                 Packet.writeUInt32(value)
  19.             }
  20.         }
  21.         else
  22.         {
  23.             if (value < 0 && value >= -128)
  24.             {
  25.                 Packet.writeInt8(value)
  26.             }
  27.             else if (value <= -129 && value >= -32768)
  28.             {
  29.                 Packet.writeInt16(value)
  30.             }
  31.             else if (value <= -32769)
  32.             {
  33.                 Packet.writeInt32(value)
  34.             }
  35.         }
  36.         
  37.     }
  38. }


Metoda Packet.writeInt się wywołuje, lecz po wywołaniu metody Packet.writeUint8 następuje crash. Ktoś ma jakiś pomysł dlaczego?
Przy okazji, czy dodawania takiej metody to w ogóle dobry pomysł?
#2
A skąd będziesz wiedział jakiego reada użyć po drugiej stronie?
#3
Właśnie nad tym myślałem i tu jest problem xD. Teoretycznie mógłym użyć metod writeString i readString, ale nie jest to zbytnio dobry pomysł. Problem udało mi się przed chwilą rozwiązać zamieniając w if'ach słówko Packet na this.
#4
No nic dziwnego, że crashowało. Chciałeś wpisać wartości do szablonu klasy? Złamałeś tutaj zasadę działania obiektowości.
No tak jak mówi Kimior, nie wiesz ile bitów będziesz musiał odczytać. Aby ominąć ten problem i tak musisz wpisywać dodatkowy bajt, który określi ile danych wpisałeś.
Czytaj 1 bajt - jakie dane, następne faktyczne dane. Przy czym kiedy przesyłasz małe wartości np. zakres 0-100 to tracisz 1 bajt, którego by tam nie musiało być.
Generalnie nie wiem po co tutaj takie uproszczenia.
#5
Rozumiem. Zastanawiałem się czy miałoby to w ogóle jakiś sens, ale z tego co widzę, to niezbyt opłacalne jest dodawanie takiej metody. Temat można zamknąć.


Possibly Related Threads…
Thread Author Replies Views Last Post
  G2O Launcher dla debian Venon 2 3,076 21.06.2020, 02:50
Last Post: Sative
  G2O nie dziala Dark 4 4,216 18.01.2019, 16:31
Last Post: Dark
  Problem z nową wersją Budyń 8 7,318 18.11.2018, 15:55
Last Post: Budyń
  Problem z własnym serwerem Zenko 2 3,210 01.03.2018, 23:13
Last Post: Profesores
  Problem z myszką Pilar 3 3,494 19.02.2018, 02:54
Last Post: Pilar
  Problem z wbiciem na serwer Dyamiti 8 8,929 18.02.2018, 22:35
Last Post: Dyamiti
  Problem buuuuuuxd 4 4,031 09.01.2018, 17:57
Last Post: buuuuuuxd
  Problem z włączaniem serwera na Ubuntu Mattwell 2 3,138 06.01.2018, 19:55
Last Post: Mattwell
  Po "zainstalowaniu" g2o na vpsie mam taki błąd Darkes 3 3,594 18.10.2017, 15:55
Last Post: Darkes
  Problem z klasami Magister 2 2,735 07.08.2017, 14:20
Last Post: Magister

Forum Jump:


Users browsing this thread: 1 Guest(s)