Gadu

Klawisz95

Użytkownik
Dołączył
Styczeń 24, 2010
Posty
54
Witam!

Może ktoś przedstawić jakiś przykład na zalogowanie się do serwera gg i zmianę statusu (dla przykładu)...??
Tylko to sprawia mi problem. Wszystko inne wydaje się ok. I nie widzę problemów...
Tylko problem jest z zalogowaniem się do sieci.
Nie odsyłajcie do protokołu - bo znam jego adres ;]
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
No to jak znasz to po co nas pytasz.
Masz strukture to wypełnij ja i wyslij.
 

Legalnl

Użytkownik
Dołączył
Październik 8, 2008
Posty
828
jak masz problem z zalogowaniem do sieci to prawdopodobnie podajesz adres serwera który nie działa. oblukaj http://www.kadu.net/monitor/ tam masz podane które serwery aktualnie pracują a które nie. Możesz także zrobić żeby lista wczytywała się do programu i program wykrywał dostępne serwery i łączył się z nimi ;)
 

Klawisz95

Użytkownik
Dołączył
Styczeń 24, 2010
Posty
54
Dzięki wszystkim. Używam stronki http://kadu.net/monitor/ do monitorowania działających serwerów już od dawna.
Ale nie to jest moim problemem.

Mniejsza w to - uporałem się z wypełnianiem struktury jakoś. Więc to już nie problem...

Teraz muszę się rozpisać ;/
Tak wieć - tworzę klasę, która będzie miała obsługiwać porotkół gg.
Oto jak wygląda moja klasa:
Kod:
class cGG
{
public:
	int uin;
	char *password;
	int port;
	char *ip;
	int image_size;
	int status;
	char *description;
	bool IsConnected();
	int Connect();

	cGG();
private:
	SOCKET *sock;
	bool connected;
	bool con;
	void Ansi2Utf8(char* text, int size, char*&result);
	int HashGG32(unsigned char *password, unsigned int seed);
	sLogin MakeLoginPacket(int seed);
	DWORD WINAPI RecvThread(void* pvParam);
	DWORD WINAPI PingThread(void* pvParam);
};

I teraz kiedy w funkcji Connect() zamieszczam to:
Kod:
CreateThread(NULL, 0, RecvThread, NULL, NULL, NULL);
To wszystko się wywala i pokazuje się taki bład:
Kod:
error C3867: 'cGG::RecvThread': function call missing argument list; use '&cGG::RecvThread' to create a pointer to member

Czy jest jakiś sposób na zrobienie wątku z jakiejś funkcji która istnieje w klasie?
Wiem jak zrobić - aby była ona poza nią, ale wtedy nie mogłaby używać funkcji zawartych w sekcji private klasy którą piszę.
Zapomniałbym... Użycie &cGG::RecvThread - tak jak sugeruje treść błedu - nie działa. Wtedy pojawia się problem z typem funkcji RecvThread.
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
Funkcja musi byc static
static DWORD WINAPI RecvThread(void* pvParam);
 

Klawisz95

Użytkownik
Dołączył
Styczeń 24, 2010
Posty
54
Oki. Dzięki grzonu :*
xD

No a wtedy będę mógł korzystać normalnie z informacji w klasie? Tak jak robiłem to dotychczas w innych funkcjach? czy przez pvParam mam przesłać wskaźnik na moją klasę ("this") ?


Edit:
Sprawdziłem sobie wszystko - teraz już wiem że muszę przesłać wskaźnik na klasę i tam się dalej bawić.
Dobrze. Tak więc - dziękuję wszystkim za informacje - jak by co - będę tutaj pisać. Proszę o niezamykanie tematu ;)

No to teraz problem. Chodzi o wypełnianie struktury logowania.
Pokażę wam jak ja to robię:
Kod:
if(header.type == GG_WELCOME) {
	sWelcome welcome;
	recv(*sock, (char*)&welcome, sizeof(sWelcome), 0);

	sLogin login;
	memset(&login, 0, sizeof(sLogin));
	login.uin = gg->uin;
	login.hash_type = GG_LOGIN_HASH_GG32;
	login.status = gg->status;
	login.features = /* 0x00000001 || 0x00000002 || 0x00000010 */ 0x00000367;
	login.image_size = gg->image_size;
	login.unknown2 = 0x64;
	login.version_len = strlen(GG_VERSION);
	
	if(gg->description != NULL)
		login.description_size = strlen(gg->description);

	memcpy(&login.language, GG_LANGUAGE, 2);
	
	int hash = gg->HashGG32((unsigned char*)gg->password, (unsigned int)welcome.seed);
	memcpy(&login.hash, &hash, sizeof(int));
	
	memcpy(&login.version, GG_VERSION, strlen(GG_VERSION));

	sHeader sheader;
	sheader.type = GG_LOGIN;
	sheader.length = sizeof(sLogin)+login.description_size;

	send(*sock, (char*)&sheader, sizeof(sHeader), 0);
	send(*sock, (char*)&login, sizeof(sLogin), 0);
	if(gg->description != NULL)
		send(*sock, gg->description, strlen(gg->description), 0);

}

To jest to co wykodziłem do tej pory. Problem jest taki że w odpowiedzi dostaję nie opisany nigdzie pakiet (typ: 0x43; długość reszty: 0).

Dajcie proszę jakieś rady!
 
Ostatnia edycja:
Do góry Bottom