BCB6 - Klient Gadu Gadu

problemy z tworzeniem programów do obsługi sieci, internetu, e-mail itp..

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez mko000 » czwartek, 28 stycznia 2010, 22:39

Kod: Zaznacz cały
vector<char>    buff(sizeof(gg_header) + sizeof(gg_send_msg80));
gg_header*      gg_hdr = (gg_header*) &buff[0];
gg_send_msg80*  gg_send = (gg_send_msg80*)(gg_hdr + 1);
string          msg = "blablabla";

gg_hdr->type = GG_SEND_MSG80;

msg.append(1,'\0');
time_t sekundy;
sekundy = time (NULL);
gg_send->recipient = 18199693;
gg_send->seq = sekundy;
gg_send->clas = 0x0008;

gg_send->offset_plain = sizeof(gg_send_msg80) + 1;
gg_send->offset_attributes = gg_send->offset_plain + msg.size();

buff.push_back('\0');
buff.insert(buff.end(),msg.begin(),msg.end());

char tab[] = { 2, 6, 0, 0, 0, 8, 0, 0, 0 };
buff.insert(buff.end(),tab,tab + sizeof(tab));

gg_hdr = (gg_header*) &buff[0];
gg_hdr->length = buff.size() - sizeof(gg_header);

Client->Socket->SendBuf(&buff[0],buff.size());

Rezultat ten sam przychodzi pusta wiadomość.
Avatar użytkownika
mko000
Homos antropiczny
Homos antropiczny
 
Posty: 74
Dołączył(a): sobota, 19 grudnia 2009, 00:30
Podziękował : 35
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2010
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez polymorphism » czwartek, 28 stycznia 2010, 23:28

Ok, spróbuj wysłać wersję html:
Kod: Zaznacz cały
vector<char>    buff(sizeof(gg_header) + sizeof(gg_send_msg80));
gg_header*      gg_hdr = (gg_header*) &buff[0];
gg_send_msg80*  gg_send = (gg_send_msg80*)(gg_hdr + 1);
string          msg = "<span style=\"color:#000000; font-family:'MS Shell Dlg 2'; font-size:9pt; \">blablabla</span>";
   
msg.append(1,'\0');

...

gg_send->offset_plain = sizeof(gg_send_msg80) + msg.size();
gg_send->offset_attributes = gg_send->offset_plain + 1;
   
buff.insert(buff.end(),msg.begin(),msg.end());
buff.push_back('\0');
char tab[] = { 2, 6, 0, 0, 0, 8, 0, 0, 0 };
buff.insert(buff.end(),tab,tab + sizeof(tab));

gg_hdr = (gg_header*) &buff[0];
gg_hdr->length = buff.size() - sizeof(gg_header);

...

swoją drogą, niezły łeb wpadł na pomysł, żeby wysyłać dwie wersje tekstu, na dodatek w różnych kodowaniach.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
mko000
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez mko000 » piątek, 29 stycznia 2010, 10:59

Ten kod nie jest dla mnie za bardzo zrozumiały.
Kod: Zaznacz cały
vector<char>    buff(sizeof(gg_header) + sizeof(gg_send_msg80));
gg_header*      gg_hdr = (gg_header*) &buff[0];
gg_send_msg80*  gg_send = (gg_send_msg80*)(gg_hdr + 1);
string          msg = "<span style=\"color:#000000; font-family:'MS Shell Dlg 2'; font-size:9pt; \">blablabla</span>";

msg.append(1,'\0');
//----------
time_t sekundy;
sekundy = time (NULL);
gg_send->recipient = 18199693;
gg_send->seq = sekundy;
gg_send->clas = 0x0008;
//----------
gg_send->offset_plain = sizeof(gg_send_msg80) + msg.size();
gg_send->offset_attributes = gg_send->offset_plain + 1;

buff.insert(buff.end(),msg.begin(),msg.end());
buff.push_back('\0');
char tab[] = { 2, 6, 0, 0, 0, 8, 0, 0, 0 };
buff.insert(buff.end(),tab,tab + sizeof(tab));

gg_hdr = (gg_header*) &buff[0];
gg_hdr->length = buff.size() - sizeof(gg_header);

Client->Socket->SendBuf(&buff[0],buff.size());

Jak tylko uzupełnię strukturę tak jak w tym kodzie to automatycznie mnie rozłącza.

PS. Się udało xD brakowało w kodzie tej linijki:
gg_hdr->type = GG_SEND_MSG80;
Dziękuje Ci bardzo za pomoc :)
Avatar użytkownika
mko000
Homos antropiczny
Homos antropiczny
 
Posty: 74
Dołączył(a): sobota, 19 grudnia 2009, 00:30
Podziękował : 35
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2010
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez polymorphism » piątek, 29 stycznia 2010, 11:30

Czyli tylko wersja html działa, tak? Pamiętaj, że ta wersja wiadomości musi być kodowana w utf8. No i dobrze by było, jakbyś sprawdził czy to działa na innych, alternatywnych komunikatorach, bo mam przeczucie, że może nie działać z samym tekstem html.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez mko000 » piątek, 29 stycznia 2010, 11:38

Tak tylko HTML działa. Jak jest z tym kodowaniem ? W twoim kodzie nie ma konwertujesz na te kodowanie. Programy sprawdzę jak znajdę który obsługuje nowe numery.
Avatar użytkownika
mko000
Homos antropiczny
Homos antropiczny
 
Posty: 74
Dołączył(a): sobota, 19 grudnia 2009, 00:30
Podziękował : 35
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2010
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez polymorphism » piątek, 29 stycznia 2010, 11:53

Jak jest z tym kodowaniem ? W twoim kodzie nie ma konwertujesz na te kodowanie.

Nie konwertuję, bo nie muszę. UTF8 jest kompatybilne z podstawowym kodowaniem ASCII, a że nigdzie nie korzystałem ze znaków diakrytycznych, nie musiałem nic konwertować. Ty, pisząc komunikator, musisz taką konwersję zapewnić. W VCL-u jest funkcja AnsiToUtf8, więc sprawa jest prosta:
Kod: Zaznacz cały
msg = "<span style=\"color:#000000; font-family:'MS Shell Dlg 2'; font-size:9pt; \">"
msg += AnsiToUtf8("Wiadomość ze znakami: śćźżółęą").c_str();
msg += "</span>";
msg.append(1,'\0');


___
p.s. opierałem się na dokumentacji z BCB6.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez Cyfrowy Baron » piątek, 29 stycznia 2010, 14:16

mko000 korzysta ze środowiska C++Builder 2010, gdzie domyślnym typem nie jest AnsiString tylko UnicodeString, więc raczej powinien użyć funkcji UnicodeToUtf8

Kod: Zaznacz cały
int __fastcall UnicodeToUtf8(char * Dest, wchar_t * Source, int MaxBytes);
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez polymorphism » piątek, 29 stycznia 2010, 15:23

Być może, choć w samym przykładzie nie ma to aż takiego znaczenia.

___
p.s. a nie prościej użyć UTF8Encode zamiast UnicodeToUtf8?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez Cyfrowy Baron » piątek, 29 stycznia 2010, 15:27

Jeżeli zamiast deklarowania zmiennej String zadeklaruje się AnsiString to wtedy można używać AnsiToUtf8. Różnica polega na tym, że w C++Builder 2009 i 2010 deklaracja String jest traktowana jako UnicodeString, a nie jak we wcześniejszych wersjach jako AnsiString.

Zmienna UnicodeString obsługuje więcej znaków niż AnsiString, więc chyba lepiej używać tego typu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez polymorphism » sobota, 30 stycznia 2010, 12:26

Machnąłem wersję ze strumieniem pamięciowym, bez użycia struktur:
Kod: Zaznacz cały
/* rozszerzmy nieco strumień pamięciowy */
#include <stdint.h>

class CMemStream:public TMemoryStream
{
public:
   void Write8(int8_t v)    { Write(&v,1); }
   void Write16(int16_t  v)    { Write(&v,2); }
   void Write32(int32_t  v)    { Write(&v,4); }
   void Write64(int64_t  v)    { Write(&v,8); }
};

...

auto_ptr<CMemStream> mem_str(new CMemStream);
string msg = "<span style=\"color:#000000; font-family:'MS Shell Dlg 2'; font-size:9pt; \">blablabla</span>";

sekundy = ...

mem_str->Write32(GG_SEND_MSG80);
mem_str->Write32(0);

mem_str->Write32(18199693);
mem_str->Write32(sekundy);
mem_str->Write32(8);
mem_str->Write32(0);
mem_str->Write32(0);
mem_str->Write(msg.c_str(),msg.size() + 1);

int offset_plain = mem_str->Position;
mem_str->Write8(0);

char tab[] = { 2, 6, 0, 0, 0, 8, 0, 0, 0 };
mem_str->Write(tab,sizeof(tab));

mem_str->Position = 5 * 4;
mem_str->Write32(offset_plain);
mem_str->Write32(offset_plain + 1);
mem_str->Position = 4;
mem_str->Write32(mem_str->Size - 8);

Client->Socket->SendBuf(mem_str->Memory,mem_str->Size);

Być może będzie bardziej zrozumiała.

____
p.s. 1. kodu nie testowałem, bo nie mam jak.
p.s. 2. Baron, przydałoby się jakieś kolorowanie składni w CODE, bo teraz kod jest nieczytelny.
p.s. 3. czy w BCB jest plik stdint.h lub coś podobnego?
Ostatnio edytowano sobota, 30 stycznia 2010, 14:20 przez polymorphism, łącznie edytowano 1 raz
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez Cyfrowy Baron » sobota, 30 stycznia 2010, 13:13

W C++Builder 2007 i 2010 jest plik stdint.h, więc w innych wersjach pewnie też.



p.s. 2. Baron, przydałoby się jakieś kolorowanie składni w CODE, bo teraz kod jest nieczytelny.


Wiem! Tylko, że ja nie znam się zupełnie na PHP, więc nie wiem jak to przerobić. Kiedyś miałem takie kolorowanie, ale bardziej przypominało to kolorowanie składni PHP niż C++, poza tym działało tylko w odniesieniu do nowych postów i całkowicie psuło kod w postach wcześniejszych. Mam ten MOD, ale on nie działa z tą wersją forum, więc póki nie znajdzie się ktoś, kto będzie potrafił zmodyfikować skrypty dla forum phpBB 3.0.5 to nic nie wymyślę.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez mko000 » sobota, 30 stycznia 2010, 14:00

Poszukałem trochę i znalazłem coś o kolorowaniu składni:
http://www.kurshtml.boo.pl/phpbb/#code_highlight
oraz opis jak to zrobic z forum przema
http://www.przemo.org/phpBB2/forum/view ... +highlight



[EDIT] Cyfrowy Baron

Niestety ten MOD współpracuje tylko ze stylem subsilver, a na tym forum domyślnym stylem jest prosilver i większość z tego stylu korzysta.
Avatar użytkownika
mko000
Homos antropiczny
Homos antropiczny
 
Posty: 74
Dołączył(a): sobota, 19 grudnia 2009, 00:30
Podziękował : 35
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2010
    Windows XPFirefox

Re: BCB6 - Klient Gadu Gadu

Nowy postprzez polymorphism » sobota, 30 stycznia 2010, 14:21

Cyfrowy Baron napisał(a):W C++Builder 2007 i 2010 jest plik stdint.h, więc w innych wersjach pewnie też.

OK. Poprawiłem nieco klasę strumienia.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Poprzednia strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje sieciowe

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 12 gości

cron