Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Platon

Pages: [1]
1
Général / Re : Impossible de faire passer un this en argument
« le: Février 26, 2015, 06:44:18 pm »
Voici l'erreur exacte :

1>UnitTower.cpp(46): error C2664: 'Shoot::Shoot(const Shoot &)' : cannot convert argument 1 from 'UnitTower' to 'const Shoot &'
1>          Reason: cannot convert from 'UnitTower' to 'const Shoot'
1>          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

Merci à vous pour votre patiente.

2
Général / Re : Impossible de faire passer un this en argument
« le: Février 26, 2015, 06:34:48 pm »
C'est à dire ?
Je ne vois pas, je suis vraiment bloquée ^^

3
Général / Impossible de faire passer un this en argument
« le: Février 26, 2015, 06:05:05 pm »
Bonjour,

Je rencontre actuellement un problème bloquant dont je ne trouve pas la solution, le but qu'un objet puisse envoyer un this ( donc un pointer vers lui même ) à un autre objet ( via son constructeur ) en argument.

voici ce que j'ai essayé en version simplifié qui ne fait apparaitre que le code du problème :

UnitTower.h

class UnitTower
{
public:
UnitTower();
~UnitTower();
sf::Sprite getSprite();
void update();
void setTarget(UnitMobile);
UnitMobile getTarget();

protected:
UnitMobile cible;
sf::Texture texture;
sf::Sprite sprite;
};

Une fonction dans le UnitTower.cpp qui doit crée un objet et envoyer un pointer de lui même

void UnitTower::update(){ Shoot shoot(this) }
le constructeur de l'objet qui récupère l'autre

class Shoot
{
public:
Shoot(UnitTower*);
~Shoot();
void fire();

protected:
sf::Texture texture;
sf::Sprite sprite;
int dommage;
UnitTower* tower;
sf::Clock clock;
};

Et son Shoot.cpp

Shoot::Shoot(UnitTower* tOwer)
{
tower = tOwer;
}

Je vous remercie d'avance et je continue à chercher ;)

Cdlm,

Phobizeur

4
Général / Instabilité du programme (Crash random)
« le: Février 07, 2015, 10:38:08 pm »
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 !

5
Réseau / Re : [SFML][RESEAU] Impossible d'envoyer un paquet
« le: Janvier 14, 2015, 11:01:16 pm »
Je crois que ça vient pas du code en faite...
Juste pour voir, j'ai test en getLocalAdress() et ça marche !!!

Mais là ou je ne comprends pas du tout, c'est quand local tout marche au poil...
Mais en public, il n'y a qu'UN SEUL packet qui passe... JUSTE UN !

J'ai crée un petit test avec 2 carrés dont le rouge est contrôlé par le joueur ( enfin dans sa fenêtre ) et le bleu est le carré dirigé par l'autre joueur via le réseau.

Et bien, en local les 2 carrés sont bien synchronisés pas de problème.

Et en public ça donne ça :

On voit que le carré bleu a bougé de quelques pixels ( UN paquet ) puis plus rien...

Donc si vous avez des idées sur la config de la box ou autres... En sachant que désactiver le firewall n'a rien changé...

6
Réseau / Re : [SFML][RESEAU] Impossible d'envoyer un paquet
« le: Janvier 14, 2015, 05:16:56 pm »
J'ai simplifié au maximum le code et je me suis très fortement inspiré de l'exemple du tchat dans le wiki mais là, c'est encore plus bizarre car je peux envoyer UN paquet ( qui marche, il reçu de l'autre coté ) mais après tout reste bloqué sur le receive() qui au bout d'un moment rend la main ( alors que le socket n'a rien reçu et après la fonction receive() est 'ignoré' car elle renvoie toujours un code différent du Socket::Done...

        while (text != "-1"){

                std::string textS = "";
                sf::Packet packS;
                std::getline(std::cin, textS);
                packS << textS;
                socket.send(packS);

                std::string textR = "";
                sf::Packet packR;
                socket.receive(packR);
                if (packR >> textR){
                        if (!textR.empty()){
                                std::cout << textR << std::endl;
                        }
                }

        }
 

PS : un grand merci à Laurent pour son infini patience.

7
Réseau / Re : [SFML][RESEAU] Impossible d'envoyer un paquet
« le: Janvier 11, 2015, 08:56:51 pm »
Ah oui effectivement, autant pour moi ! ( il faut utiliser "if (socket.send(packet2) == sf::Socket::Done)" )
Donc maintenant le packet est bien envoyé mais jamais reçu...

Et là, je relis encore là doc en ce moment et je vois pas. Pourtant le premier packet qui confirme la connexion passe... J'ai check que le socket est bien connecté... à s'en arracher les cheveux.

Et du coup, j'obtiens une boucle de : "ERREUR DANS LA RECEPTION" pour le 'serveur' et le client (vu qu'il passe en mode 'réception')
Mais du coup, c'est encore plus bizarre puisque normalement il devrait bloquer sur le socket.receive() comme le serveur n'a rien pu envoyer...

En tout cas, merci pour la réponse et bravo pour le développement de cette magnifique Library ( OMG enfin fini les 36 modules de sdl... )

8
Réseau / Re : [SFML][RESEAU] Impossible d'envoyer un paquet
« le: Janvier 11, 2015, 07:21:29 pm »
J'ai oublié de vous donner les détails de l'erreur...

Le programme bloque à la ligne 70 -73 du Source.cpp puisque  if (socket.send(packet2)) return false...


Donc pour une raison inconnue, le packet n'est pas envoyé.

9
Réseau / [SFML][RESEAU] Impossible d'envoyer un paquet
« le: Janvier 11, 2015, 06:09:54 pm »
Amis du soir, bonsoir !

Je viens vous demander de l'aide pour tenter de me débloquer sur un problème dont je ne vois pas l'origine.

Concrètement, je ne comprend pas pourquoi mon programme arrive à lancer et recevoir un premier paquet mais ensuite il refuse catégoriquement d'en envoyer d'autres...

Voici donc mon programme en 2 parties :

Connection.h

#include <SFML/Graphics.hpp>
#include <SFML\Network.hpp>
#include <iostream>
#include <sstream>
 
sf::TcpSocket socket;
sf::IpAddress ip = sf::IpAddress::getPublicAddress();
sf::TcpListener listenner;
 
sf::Packet packet;
 
sf::Http http("---ADRESSE DE MON SERVEUR---");
sf::Http::Request request;
sf::Http::Response response;
std::ostringstream stream;
sf::Socket::Status status;
 
char choix, mode = 'n';
char buf[2000];
std::string text,textRep;
std::string repServ, ligne;
 
void connection(){
 
    request.setMethod(sf::Http::Request::Post);
 
    std::cout << "Votre ip : " << ip << std::endl;
 
    std::cout << "Etre le Serveur : s | Etre le Client : c" << std::endl;
    std::cin >> choix;
 
    if (choix == 'c'){
 
        mode = 's';
 
        std::cout << "Vous etes un Client" << std::endl;
 
        std::cout << "CONNEXION EN COURS..." << std::endl;
 
        request.setUri("/index.php");
        response = http.sendRequest(request);
 
        repServ = response.getBody();
        std::istringstream lin(repServ);
 
        std::cout << "RECHERCHE DE SERVEUR EN COURS..." << std::endl;
 
        std::getline(lin, ligne);
        status = socket.connect(ligne, 2000);
 
        while (status != sf::Socket::Done){
             
            std::getline(lin, ligne);
            if (ligne == ""){
                std::cout << "Aucun serveur disponible" << std::endl;
                break;
            }
 
 
            status = socket.connect(ligne, 2000);
             
        }
 
        text = "Connection avec le client reussi !";
        packet << text;
 
    }
    else if (choix == 's'){
 
        mode = 'r';
 
        std::cout << "Vous etes le serveur" << std::endl;
         
        request.setUri("/addServ.php");
         
        stream << "ip=" << ip;
        request.setBody(stream.str());
        response = http.sendRequest(request);
        std::cout << "RECHERCHE D'UN CLIENT EN COURS..." << std::endl;
        listenner.listen(2000);
        listenner.accept(socket);
        std::cout << "SOCKET ACCEPTE" << std::endl;
 
        text = "CECI EST ENVOYE DEPUIS LE SERVEUR";
        packet << text;
    }
    else{
        std::cout << "OKTAMER" << std::endl;
         
    }
 
}
 
void decoBdd(std::string ipp){
 
    request.setUri("/delServ.php");
    response = http.sendRequest(request);
 
}
 


Source.cpp



#include <SFML/Graphics.hpp>
#include <SFML\Network.hpp>
#include <iostream>
#include <sstream>
#include <string>
#include "TileMap.h"
#include "Connection.h"
 
//sf::RenderWindow window(sf::VideoMode(800, 600), "Test MAP !");
 
//TileMap map;
 
int main()
{
     
    /*const int maap[] =
    {
        154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
        154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
        154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
        160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
        170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
        154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
        154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154
    };
 
    map.load("tiles.png", sf::Vector2u(32, 32), maap, 22, 7);
 
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
 
        window.clear();
        window.draw(map);
        window.display();
    }*/

 
    connection();
 
    socket.send(packet);
    socket.receive(packet);
    packet >> textRep;
    std::cout << textRep << std::endl;
 
    std::cin.ignore();
 
    decoBdd(ligne);
 
    std::cout << "--<§> TCHAT TEST <§>--" << std::endl;
    std::cout << "Envoyer '-1' pour quitter le Tchat" << std::endl;
 
    while (text != "-1"){
 
        text="";
        textRep="";
        sf::Packet packet2;
 
        if (mode == 's'){
 
            std::cout << "VOTRE TEXT : " << std::endl;
            std::getline(std::cin, text);
             
            packet2 << text;
 
                if (socket.send(packet2)){
                    mode = 'r';
                }
                else{ std::cout << "ERREUR DANS L'envoie" << std::endl; }
 
        }
        else if (mode == 'r'){
 
            socket.receive(packet2);
            std::cout << "A" << std::endl;
 
            if (packet2 >> textRep){
 
                std::cout << "B" << std::endl;
                std::cout << textRep << std::endl;
                std::cout << "C" << std::endl;
                mode = 's';
 
            }
            else{ std::cout << "ERREUR DANS LA RECEPTION" << std::endl; }
             
        }
        else{
            return 0;
        }
 
        std::cout << "---------------" << std::endl;        
 
    }
 
    std::cout << "CONNEXION TERMINEE" << std::endl;
 
    system("pause");
 
    return 0;
}
 

Merci infiniment d'avance !

Cdlm,

Pages: [1]
anything