Bonjour à tous,
j'ai quelques soucis sur le fonctionnent d'un SocketSelector.. :( Je m'explique...
En réalité j'ai du mal à comprendre l'utilité réel d'un selector. Si j'ai bien compris, avant il serait à mettre le socket sur le devant de la liste lorsqu'il y a réception d'un packet. non ? Et que maintenant il ne sert qu'à signaler qu'il y a un socket qui a recu un packet non ?
En gros, actuellement j'ai mon programme qui fonctionne de cette manière :
//CECI N'EST QU'UNE PARTIE DE MON CODE
void newConnected()
{
sf::TcpSocket* client = new(sf::TcpSocket);
if(serverTcp.accept(*client) == sf::Socket::Done){
std::cout<<"New connection received from "<<client->getRemoteAddress()<<std::endl;
clients.push_back(client);
selectorTcp.add(*client);}
else{
delete client;}
}
void online()
{
newConnected();
if(selectorTcp.wait(sf::microseconds(1))){
for(int x=clients.size()-1; x>=0; --x){
sf::TcpSocket* client = clients.at(x);
if(selectorTcp.isReady(*client)){
sf::Packet packet;
sf::Socket::Status status= client->receive(packet);
if(status == sf::Socket::Done){
analysis(packet);}
else{
std::cout<<"Probleme de reception"<<std::endl;}}}}
}
Mais l'inconvénient de ce code, c'est qu'il parcourt tout les sockets actuellement connecté pour vérifier lequel est prêt. Non ?
Voilà, j'ai besoin de quelques éclaircissements pour comprendre mieux le fonctionnement de cette fonction ou si il ya clairement moyen de mieux faire que cette méthode s'il vous plait :(
Le but étant de pouvoir tenir un transfert rapide entre les clients et le serveur pour au moins 10 personnes.
Merci beaucoup!