Bonjour,
Voilà, j'attaque la partie réseau de mon programme.
Mon jeu se déroule ainsi : un joueur fait office de serveur et le second tente de se connecter au premier.
Jusqu'ici, aucun problème, les menus fonctionnent correctement, le client parvient à se connecter au serveur et j'ai réalisé un envoi de packet (de type Fighter, une classe personnalisée) qui fonctionne très bien.
Néanmoins lorsqu'il s'agit de réaliser la partie, je ne sais pas très bien pourquoi, mais les données ne se mettent pas à jour, les packets ne sont pas correctement reçus. De plus, le jeu est très lent.
C'est la première fois de ma vie que je touche à du réseau, je vous présente le code concerné.
Boucle Principale :
while(mWindow->isOpen())
{
processEvents();
timeSinceLastUpdate += clock.restart();
while(timeSinceLastUpdate > TimePerFrame)
{
processEvents();
update(TimePerFrame);
checkCollider();
updateOnline();
render();
if(mMoving[ESCAPE])
{
mMoving[ESCAPE] = false;
mType = -1;
return;
}
}
}
La fonction UpdateOnline :
if(mType != LAUNCHGAMEONLINE)
return;
mLastOnlineTry.restart();
sf::Packet sending, receiving;
sending << mCurrentFighter;
mOnlineManager->send(sending);
receiving = mOnlineManager->receive();
receiving >> *(mOpponentFighter);
Les fonctions send et receive de la classe OnlineManager :
void OnlineManager::send(sf::Packet p)
{
if(!mConnected)
return;
while(mSocket.send(p) != sf::Socket::Done);
}
sf::Packet OnlineManager::receive()
{
sf::Packet p;
if(!mConnected)
return p;
while(mSocket.receive(p) != sf::Socket::Done);
return p;
}
Voilà. Le jeu est très lent (sans doute à cause des boucles je suppose) et en plus de ça, les données ne sont pas reçues côté client ni serveur..
Merci de m'avoir lu.
Cordialement !