Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Qt Ottenere oggetto parent
Forum - C/C++ - Qt Ottenere oggetto parent

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2297
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 9:00
Venerdì, 05/02/2021
Buongiorno sto scrivendo un server che supporti piu client connessi temporaneamente.

Il problema sta nel ottenere dagli altri client un socket esempio cosa sta facendo.

un esempio:
Socket 667  sta in room 24
Socket 662 sta in room 24
Socket 255 sta in rom 35


Quello che deve fare ogni socket è ovviamente ottenere la lista di tutti i client connessi al server
ed ottenere la loro effettiva posizione.
Siccome i socket sono divisi in Thread per una maggiore efficienza di trasmissione e gestione dei dati,
ogni Thread funziona e viene gestito in modo unico.

Al server ho aggiunto una lista

Codice sorgente - presumibilmente Plain Text

  1. //Server.h
  2.  
  3. QList<QSharedPointer<Thread> > clients;




Al momento della creazione del Thread faccio in questo modo

Codice sorgente - presumibilmente C/C++

  1. Thread *thread = new Thread(clientID, this);
  2.         clients.append(QSharedPointer<Thread>(thread));



Quindi vado aggiungere alla lista tutti i Thread al quale i socket sono connessi.

Da Thread però ora non so come accedere alla lista contenuta nel server.
Prima di tutto dovrei avere accesso all'oggetto server ma quando provo

Codice sorgente - presumibilmente Plain Text

  1. if(QString(Data).contains("getid"))
  2.     {
  3.         Server s = static_cast<Server>(this->parent());
  4.     }




Mi viene fuori l'errore

server.h:102: error: 'QTcpServer::QTcpServer(const QTcpServer&)' is private

Non capisco chiaramente perché mi reputa il TcpServer come privato.

Soluzioni?





https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 9:18
Mercoledì, 10/02/2021
Stai creando una nuova istanza dell'oggetto server e il costruttore per copia è stato reso privato, probabilmente per evitare cose brutte. Di solito si fa così perchè la classe in questione ha un iter di inizializzazione complesso oppure perchè acquisisce risorse globali comportandosi da singleton.
Se proprio vuoi condividere il server passa un puntatore, oppure se vuoi fare una cosa più pulita prova a condividere solo la struttura che contiene la lista che ti interessa invece dell'intero oggetto server.

Ciao!

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2297
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 17:54
Lunedì, 15/02/2021
non ci sarei mai arrivato.
Grazie mille sensei.

:ot:
Quanto tempo che è passato da quando ridevamo coi ciaffi alla vecchia chat irc :rotfl:


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote