Witajcie. Piszę w dziale newbie, gdyż problem wydaje mi się naprawdę banalny oraz moje umiejętności z obsługą różnej maści komponentów do obsługi sieci (sockety, synapse, winsock i inne) są praktycznie zerowe. (jestem totalnym laikiem)
Od pewnego czasu męczę się z implementacją protokołu Gadu-Gadu (http://toxygen.net/libgadu/protocol/).
Staram opierać się na gotowym komponencie TEasyGG, który obsługuję tą sieć.
Korzystam z Delphi 2010.
część 1.2. Zanim się połączymy udało mi się zaimplementować, pobieram bez problemów host oraz port, ale problem pojawia się dalej.
A mianowicie z wysyłaniem i odbieraniem pakietów.
Zacznijmy może od początku. Jaka biblioteka byłaby do tego najlepsza (najłatwiejsza)?
Zaraz po połączeniu do serwera musimy odebrać pakiet:
#define GG_WELCOME 0x0001
który w Delphi wygląda tak: const GG_WELCOME = $0001;
Na wypróbowanie położyłem na formę komponent idTCPClient i napisałem taki kod:
```delphi
var
Host: Ansistring;
Port: Integer;
begin
GetHost(0, Host, Port);
IdTCPClient1.Port := Port;
IdTCPClient1.Host := Host;
IdTCPClient1.Connect;
if IdTCPClient1.IOHandler.ReadByte = GG_WELCOME then
ShowMessage('Witamy!')
else
ShowMessage('zegnamy!');
procedura GetHost jest żywcem wzięta z komponentu TEasyGG (pierwszy parametr numer GG (0)- dalej wiadomo. Parametry Host i Port przekazywane są przez referencję)
Zgodnie z opisem protokołu zaraz po połączeniu serwer powinien nam wysłać pakiet GG_WELCOME. Problem jaki mi się pojawił to jak ten pakiet wychwycić? Jak go odebrać? Zacząłem kombinować i skutkiem jest kod powyżej. Czy jest to prawidłowe odebranie tego pakietu? (Komunikat "Witamy!" się pokazuje). Jeżeli nie, to w jaki sposób profesjonalnie pakiety odebrać?
Ok, przyjmijmy że odebrałem pakiet GG_WELCOME. Następnie serwer wysyła ziarno:
struct gg_welcome {
int seed; /* ziarno */
};
w Delphi:
type
Pgg_welcome = ^Tgg_welcome;
Tgg_welcome = packed record
seed: LongWord;
end;
jak mam to odebrać? Jak wysyłać inne pakiety?
Trochę się rozpisałem, mam nadzieję że wszystko jest jasne. Do wysyłania wiem, że istnieje coś takiego jak idTCPClient.WriteBuffer(); i by nie było żadnego problemu, ale nie mam czegoś takiego w delphi XE 2010. (Pewnie jest, ale jakoś ukryte).
Bardzo bym prosił o pomoc, gdyż ten problem ściąga mi sen z powiek a dla ludzi obeznanych w temacie jest na pewno śmieszny.
Pozdrawiam.