konto usunięte

Temat: [C++] problem

mamy 3 klasy cChannel, cServer i cClient. pozniej definicje (niecale, tylko to co potrzebne tutaj):


class cChannel
{
public:
UINT16_T channel_id;
//
UINT8_T item;
// ...
};
//---------------------------------------------------
class cClient
{
//nic potrzebnego z definicji
public:
UINT16_T client_id;
cClient(parametry);
DWORD WINAPI ClientThread(PVOID pParam);
}
//---------------------------------------------------
class cServer
{
private:
cClient *client;
public:
UINT16_T server_id;
cChannel *channel;
//...
};


server otwiera port, czeka na polaczenie, gdy klient sie podlaczy, mamy:


client = new cClient(parametry);
if(client->initOK == TRUE)
{
CreateThread(......., client->ClientThread);
}
//...


i teraz w watku klienta - klasa cClient - chcialbym miec dostep do klasy cChannel ktora jest zdefiniowana w cServer

jak to zrobic?

dodam, ze kazda klasa ma unikatowe ID wiec cos w stylu cServer::client->item chyba nie wchodzi w rachube bo za kazdym razem trzeba by przeszukiwac wszystkie servery po identyfikatorze zeby dostac sie do konkretnego channel'a.

jedyne co mi przychodzi do glowy, to zeby w definicji cClient dodac cChannel *channel i w konstruktorze dopisac parametr zeby przekazywac wskaznik do tego channela dalej...?Tomasz Szkutkowski edytował(a) ten post dnia 03.08.11 o godzinie 18:32
Sławomir Orłowski

Sławomir Orłowski PhD, physicist,
software
developer/architect
team leader...

Temat: [C++] problem


i teraz w watku klienta - klasa cClient - chcialbym miec dostep do klasy cChannel ktora jest zdefiniowana w cServer

jak to zrobic?

dodam, ze kazda klasa ma unikatowe ID wiec cos w stylu cServer::client->item chyba nie wchodzi w rachube bo za kazdym razem trzeba by przeszukiwac wszystkie servery po identyfikatorze zeby dostac sie do konkretnego channel'a.

jedyne co mi przychodzi do glowy, to zeby w definicji cClient dodac cChannel *channel i w konstruktorze dopisac parametr zeby przekazywac wskaznik do tego channela dalej...?
No i to jest chyba najprostsze rozwiązanie :) Jeśli masz taki komfort w programie, że obiekt klasy cChannel tworzy się jako pierwszy i ginie po obiekcie cClient.
A przy okazji piszesz "chcialbym miec dostep do klasy cChannel ktora jest zdefiniowana w cServer", a chyba powinno być, że chcesz mieć dostęp do obiektu klasy, a nie do samej klasy. Sorry, że się czepiam, ale na początku myślałem, że właśnie dokładnie to chcesz zrobić co napisałeś i miałem pytać w jakich plikach *.h są te klasy zdefiniowane.

konto usunięte

Temat: [C++] problem

No ja tez chyba zle sformulowalem zdanie hehe, no narazie robie wg tego pomyslu z przekazaniem do konstruktora, zobaczymy co z tego wyjdzie...

Natomiast nie mam jeszcze pomyslu odnosnie funkcjonalnosci dot. Socketow... Zaczalem pisac "od tylu" hehe....

1. Server otwiera port
2. Czeka na polaczenie od klienta

Serwerow moze byc duuuuzo (jest jakis limit?). Zasada 1 Server = 1 klient.

Jak uzywac w takiej konfiguracji socketow? W tej chwili w konstruktorze serwera otwieram socket servera na okreslonym porcie, jesli wszystko przebiegnie poprawnie to odpalam watek serverthread ktory z kolei ma oczekiwac na podlaczenie klienta, z tym ze gdy klient sie odlaczt (polaczenie bedzie zamkniete) to server powinien ponownie czekac na polaczenie... Nie chce zrobic cos w stylu for(;;) bo zassam cala moc procesora...

Generalnie jesli ktos jest zainteresowany pomoca, prosilbym na pw. Wczesniej pisalem tylko w czystym C i pewnie nie raz jeszcze bede potrEbowal pomocy ;-)
Jarosław Rybski

Jarosław Rybski Programista
C/C++/Python

Temat: [C++] problem

Tomasz Szkutkowski:
1. Server otwiera port

Ciekawe ;)
2. Czeka na polaczenie od klienta
Serwerow moze byc duuuuzo (jest jakis limit?). Zasada 1 Server = 1 klient.

Hmm standardowo serwer jest jeden i wielu klientów.
No chyba że mam jakiś klaster to wtedy co innego.

A ilu klientów może przyłączyć serwer - to zależy od implementacji,
systemu, zasobów sprzętowych - kiedyś robiłem testy.

Windows 7:
28000 wątków (nawiązanych połączeń)
65 połączeń na sekundę

Linux:
16000 wątków (nawiązanych połączeń)
250 połączeń na sekundę

Zresztą gdzieś to na grupie było http://www.goldenline.pl/forum/1715232/pthread-create-...
Jak uzywac w takiej konfiguracji socketow? W tej chwili w konstruktorze serwera otwieram socket servera na okreslonym porcie, jesli wszystko przebiegnie poprawnie to odpalam watek serverthread ktory z kolei ma oczekiwac na podlaczenie klienta, z tym ze gdy klient sie odlaczt (polaczenie bedzie zamkniete) to server powinien ponownie czekac na polaczenie... Nie chce zrobic cos w stylu for(;;) bo zassam cala moc procesora...

Oj coś przekombinowane

for(;;)
{
accept( ....
CreateThread( ...
}

Serwer oczekuje na przyłączenie klienta, natomiast pętla wykona się tyle razy
ile będzie prób połączenia więc nie ma obciążenia dla systemu.
Generalnie jesli ktos jest zainteresowany pomoca, prosilbym na pw.
Gdyby wszyscy się udzielali na priv a nie na forum to nudno by tu było.
Wczesniej pisalem tylko w czystym C i pewnie nie raz jeszcze bede potrEbowal pomocy ;-)

Coś podobnego było
http://www.goldenline.pl/forum/2262484/winsock

konto usunięte

Temat: [C++] problem

dzieki za odpowiedz

no bylo wczesniej, ale teraz wersja C++ akurat hehe

musze to wszystko przemyslec i na spokojnie przeanalizowac i napisac bo troche chaotycznie zaczalem to przepisywac wszystko i sie problemy niepotrzebne robia

ale i tak dzieki :)

Następna dyskusja:

Problem z dynamicznym przyd...




Wyślij zaproszenie do