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!