Witam, mam dylemat odnośnie zarządzania połączeniami client-server.
Chodzi głównie o to, że po połączeniu się z serwerem tworzę sobie takie "pseudo-pokoje", które dobierają clientów w pary.
Niestety na chwilę obecną kod napisałem tak, że przy dołączeniu trzeciego klienta, SID sesji zostaje rozesłany po wszystkich clientach.
Bardzo proszę o podpowiedź, nakierowanie jak zarządzać połączeniami, aby wiadomość była wysyłana, tylko w odpowiednie miejsce?
Połączenie przychodzące:
void ServerInstance::incomingConnection(int handle)
{
ReportClock::getCurrentDateTime();
qDebug() << __FUNCTION__ << "L: " << __LINE__ << "Incoming Connection...";
Client *client = new Client(this);
client->SetSocket(handle);
connect(client,SIGNAL(newPlayer(int,int)),this,SLOT(createNewGameRoom(int,int)));
connect(this,&ServerInstance::waitingForSecondPlayer,client,&Client::sendAnswer);
}
Wysyłanie odpowiedzi:
void ServerInstance::_waitingForSecondPlayer(int indexFromGameRoomVect)
{
QJsonObject _obj;
_obj["Unique_SessionKey"] = gameRooms[indexFromGameRoomVect]->getKeySession();
_obj["Order"] = int(ServerClientMessages::WaitForSecondPlayer);
QJsonDocument _doc;
_doc.setObject(_obj);
emit waitingForSecondPlayer(_doc);
}
void Client::SetSocket(int Descriptor)
{
socket = new QTcpSocket(this);
connect(socket,SIGNAL(connected()),this,SLOT(connected()));
connect(socket,SIGNAL(disconnected()),this,SLOT(disconnected()));
connect(socket,SIGNAL(readyRead()),this,SLOT(readyRead()));
socket->setSocketDescriptor(Descriptor);
qDebug() << "Client connected";
}
void Client::sendAnswer(QJsonDocument &document)
{
QByteArray buffer;
buffer = document.toBinaryData();
socket->write(buffer);
}
Update:
Teraz mi jeszcze przyszło do głowy, aby ten Descriptor dać jako argument do wysyłania, wtedy powinien odezwać się tylko ten jeden, konkretny, socket?