Amis du soir, bonsoir !
Tout est dans le titre, je ne comprends pas pourquoi mon programme crash de façon aléatoire...
J'ai simplifié à l’extrême maximum pour trouver la faille mais le problème persiste.
Les symptômes : Tout peut bien marcher sans aucun soucis pendant 1/2 heure ou bien alors crash au bout de 2 minutes ou bien même au lancement.
Le code ( Méga simplifié, il est quasiment vide ) :
#include <SFML/Graphics.hpp>
#include <SFML\Network.hpp>
#include <iostream>
#include <sstream>
#include <string>
#include "TileMap.h"
#include "Connection.h"
sf::RectangleShape rect1, rect2;
sf::Vector2f prevPosition, p2Position;
bool update = false;
int main()
{
rect1.setSize(sf::Vector2f(20, 20));
rect2.setSize(sf::Vector2f(20, 20));
rect1.setFillColor(sf::Color::Red);
rect2.setFillColor(sf::Color::Blue);
connection();
/* sf::IpAddress ip = sf::IpAddress::getLocalAddress();
sf::TcpSocket socket;
char mode;
std::cout << "Serveur : s | client : c" << std::endl;
cin >> mode;
if (mode == 's'){
sf::TcpListener listener;
listener.listen(2000);
listener.accept(socket);
}
else{
socket.connect(ip, 2000);
mode = 'r';
}*/
sf::RenderWindow windows(sf::VideoMode(800, 600, 32), "Packets");
std::cin.ignore();
decoBdd(ligne);
socket.setBlocking(false);
windows.setVerticalSyncEnabled(true);
while (windows.isOpen()){
sf::Event event;
sf::Packet packet;
while (windows.pollEvent(event)){
if (event.type == sf::Event::Closed || event.key.code == sf::Keyboard::Escape)
windows.close();
else if (event.type == sf::Event::GainedFocus)
update = true;
else if (event.type == sf::Event::LostFocus)
update = false;
}
if (update){
prevPosition = rect1.getPosition();
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
rect1.move(1, 0.0f);
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
rect1.move(-1, 0.0f);
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
rect1.move(0.0f, -1);
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
rect1.move(0.0f, 1);
if (prevPosition != rect1.getPosition()){
if (packet << rect1.getPosition().x << rect1.getPosition().y){
std::cout << "Envoyé :" << rect1.getPosition().x << " | " << rect1.getPosition().y << std::endl;
socket.send(packet);
}
}
}
socket.receive(packet);
if (packet >> p2Position.x >> p2Position.y){
rect2.setPosition(p2Position);
std::cout << "Reçu :" << p2Position.x << " | " << p2Position.y << std::endl;
}
windows.draw(rect1);
windows.draw(rect2);
windows.display();
windows.clear();
}
return 0;
}
Merci de votre attention !