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
- Rejestracja:ponad 14 lat
- Ostatnio:około 12 lat
- Rejestracja:ponad 12 lat
- Ostatnio:prawie 12 lat
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 :)
- Rejestracja:ponad 14 lat
- Ostatnio:około 12 lat
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:
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:
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

- Rejestracja:ponad 14 lat
- Ostatnio:ponad 5 lat
- Lokalizacja:Kosmos
- Postów:1571
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.
- Rejestracja:ponad 12 lat
- Ostatnio:prawie 12 lat
Może tak:
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 :)

- Rejestracja:ponad 17 lat
- Ostatnio:11 miesięcy
qwertty43 napisał(a):
Poczytaj o protokole XMPP.
Co ma XMPP do customowego protokołu Gadu-Gadu? :|