Salut à tous !
Alors voilà, depuis un bon moment déjà, j'utilise une technique qui fonctionne mais qui n'est pas fiable :
Lorsque le client se déconnecte, il envoi un packet pour en avertir le serveur et celui-ci agit en conséquence, néanmoins... si le client se déconnecte " salement " ( genre il ferme le programme via le processus ou le quitte en fermant la console d'un coup ou encore si sa connexion internet a soudainement un problème ), évidemment, la détection ne se fait pas.
Il y a plusieurs mois de cela, j'avais testé une méthode qui fonctionnait à merveille avec sf::Socket::Status mais impossible de retrouver le lien du topic et depuis une petite heure, j'essaye de retrouver la méthode, en vain.
J'ai essayé comme ceci, mais si je ferme le client d'un coup, le serveur ne détecte rien, hors, je sais que c'est parfaitement possible pour l'avoir expérimenté quelques mois auparavant grâce à la méthode énoncée dans ce fameux topic introuvable..
void Network::receiveData()
{
///SI UN CLIENT SE DECONNECTE///
if (m_vecTempSocket.size()>0)
{
for (unsigned int i = 0 ; i < m_vecTempSocket.size() ; i++)
{
sf::Packet exitPacket;
if (m_vecTempSocket[i]->receive(exitPacket) == sf::Socket::Status::Disconnected)
{
std::cout << "Le client est parti." << std::endl;
m_vecTempSocket.erase(m_vecTempSocket.begin()+i);
}
}
}
}
Je vous pose donc la question, ayant perdu de vue cette méthode qui était par ailleurs très simple.. c'est très frustrant !
Merci à vous ;-)