Działający klient Gadu-Gadu w C#

Działający klient Gadu-Gadu w C#
DU
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
0

Czy ktoś ma może działający klient gg? Chociaż logowanie...
Zacząłem aktualizować dotgadu (https://code.google.com/p/dotgadu/), serwer ładnie zwraca seeda, ale w żaden sposób nie potrafię zmusić go żeby odpowiedział cokolwiek na pakiet z logowaniem...
Z góry dziękuje za pomoc

UT
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 12 lat
1

Ja ostatnio pisałem pod protokół znajdujący się na http://toxygen.net/libgadu/protocol/. Działają nowe numery.
Jest logowanie, zmiana statusu, wysyłanie oraz odbieranie wiadomości.
Link: https://www.amazon.com/clouddrive/share?s=ofUdTG3gT0IsBJ25jaGgzo

@Edit A no i zmiana opisu nie działa. Pewnie jakiś głupi błąd walnąłem :)

edytowany 1x, ostatnio: Utermiko
DU
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
0

niby dziala ale tak nie do konca. Aqq niewywaliło mi multilogowania :P, opis natomiast zmienia bez problemu a nie zmienia mi statusu :P

edytowany 1x, ostatnio: Dubler
UT
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 12 lat
1

A no bo nie ma multilogowania :P Trzeba by dorobić.
Dałem source więc możesz modyfikować.

@Edit Pamiętaj, żeby wysłać odpowiednią flagę przy logowaniu jak już będziesz robić multilogowanie.

edytowany 1x, ostatnio: Utermiko
DU
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
0

bardzo Ci dziękuje, jakoś już sobie poradze mając taki base. Temat do zamknięcia

DU
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
0

odświeżam znowu temat bo mam drobny temat z pobieraniem dodatkowych informacji o kontaktach.
Na podstawie http://toxygen.net/libgadu/protocol/#ch1.5 wysyłam taki pakiet:

Kopiuj
         public static byte[] WriteContacts(short count) 
        {
            using (PacketWriter writer = new PacketWriter())
            {
                foreach (var k in Global.kontakty)
                {
                    writer.Write(k.Numer);
                    writer.Write(k.Flag);
                }
                return BuildHeader(Container.GG_NOTIFY_LAST, writer.Data);
            }
        } 

a zwrot czytam:

Kopiuj
             using (PacketReader reader = new PacketReader(data))
            {
                if (data.Length > 0)
                {
                        // zakladajac, ze opis to ostatnia 'czesc pakietu'
                        //while (reader.PeekChar().ToString() != "\0") //tutaj nie 
                        //{
                        while (true)
                        {
                            try
                            {
                                int uin = reader.ReadInt32();		/* numer Gadu-Gadu kontaktu */
                                int status = reader.ReadInt32();		/* status */
                                int features = reader.ReadInt32();		/* opcje protokołu (patrz GG_LOGIN80) */
                                int remote_ip = reader.ReadInt32();		/* adres IP bezpośrednich połączeń (nieużywane) */
                                short remote_port = reader.ReadInt16();	/* port bezpośrednich połączeń (nieużywane) */
                                char image_size = reader.ReadChar();	/* maksymalny rozmiar obrazków w KB */
                                char unknown1 = reader.ReadChar();		/* 0x00 */
                                int flags = reader.ReadInt32();		/* flagi połączenia (patrz GG_LOGIN80) */
                                int description_size = reader.ReadInt32();	/* rozmiar opisu */
                                char[] description = reader.ReadChars(description_size);	/* opis (nie musi wystąpić, bez \0) */
                                Global.kontakty.Find(c => c.Numer == uin).Opis = new string(description);
                                Global.kontakty.Find(c => c.Numer == uin).Status = (byte)status;
                            }
                            catch (Exception e) { System.Windows.MessageBox.Show(e.ToString()); break; }
                        }
                        //}
                }
            }

Niestety pakiet zwrotny jest jakiś urwany. Wysyłam informacje o 270 kontaktach a 4 kontakt przychodzi błędny. Numer jest ok, status mi zwraca 22 chociaż jest niedostępny, features etc az do flags nie ma w ogole, description_size jest natomiast zbyt dlugie i w zasadzie wywala error pod koniec czytania z powodu swojej "urwanosci", następnych kontaktów już nie ma. Ktoś ma pomysł co mogę robić źle?

Nie wiem czy moge pisac tutaj czy mam nowy temat zalozyc, nie znam zwyczajow tego forum

edytowany 1x, ostatnio: Dubler
xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
0

Opis protokołu nie jest już taki świeży, a wiem, że GG majstruje w swoim protokole i gdy sam pisałem ostatnio nawet klienta to też niektóre rzeczy nie działały po prostu. Choć to niekoniecznie powód twojego problemu.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
UT
  • Rejestracja:ponad 12 lat
  • Ostatnio:prawie 12 lat
0

Może tak:

Kopiuj
if(description_size > 0)
{
  char[] description = reader.ReadChars(description_size); 
  Global.kontakty.Find(c => c.Numer == uin).Opis = new string(description);
}  else Global.kontakty.Find(c => c.Numer == uin).Opis = string.Empty; 

Poza tym na początku opisu protokołu jest:

Przy opisie struktur, założono, że char ma rozmiar 1 bajtu, short 2 bajtów, int 4 bajtów, long long 8 bajtów, wszystkie bez znaku.

Więc:
do char użyj byte lub char,
do short użyj ushort,
do int użyj uint,
do long long użyj ulong.
To akurat nie powinno mieć żadnego wpływu na twój błąd, ale lepiej używać typów bez znaku skoro tak napisali w opisie :)

DU
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
0

dzięki, niestety to nie ma wpływu na urwany pakiet :P

Q4
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:103
0

Poczytaj o protokole XMPP.

DU
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 lat
0

fajnie fajnie, tylko jak to się ma do uszkodzonego pakietu? Nie bardzo jest co odczytywac z pakietu ktory jest przerwany op 460 bajtach i NIE JEST pakietem xmpp

edytowany 1x, ostatnio: Dubler
Demonical Monk
  • Rejestracja:ponad 17 lat
  • Ostatnio:11 miesięcy
0
qwertty43 napisał(a):

Poczytaj o protokole XMPP.

Co ma XMPP do customowego protokołu Gadu-Gadu? :|


Women were the reason I became a monk - and, ah, the reason I switched back...
DU
w xmpp są odpowiedzi serwera np z listą kontaktów, niestety pakiet o którym mowa jest zwykły
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)