Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "server.h"
- #include <iostream>
- #include <SFGUI\SFGUI.hpp>
- #include <SFML\Network.hpp>
- #include <SFML/Graphics.hpp>
- #include "Structure.h"
- #include "Propriete.h"
- #include "Affichage.h"
- #include "Interface.h"
- #include <iostream>
- #include "Constante.h"
- #include "Game.h"
- using namespace std;
- using namespace sf;
- bool once=true;
- std::string text;
- TcpListener listener;
- SocketSelector selector;
- vector<sf::TcpSocket* > clientList;
- float timeTimeout = 0,interval = 0.01,lastTime = 0;
- void sendBallPosition(TcpSocket* client) // Envoi de la position de la balle aux clients
- {
- Game& game = Game::Instance();
- sf::Packet posBall;
- posBall << game.GetBall()->position.x << game.GetBall()->position.y;
- client->send(posBall);
- }
- void sendBarPosition(TcpSocket* client) // Envoi la position des barres aux clients
- {
- Game& game = Game::Instance();
- sf::Packet posBar;
- posBar << game.GetPlayerOne()->getPosition().x << game.GetPlayerOne()->getPosition().y<< game.GetPlayerTwo()->getPosition().x << game.GetPlayerTwo()->getPosition().y;
- client->send(posBar);
- }
- bool collisionChecker(sf::Vector2f pos1,sf::Vector2f pos2,sf::Vector2f size1,sf::Vector2f size2) // vérifie les collisions
- {
- if((pos2.x >= pos1.x + size1.x)
- || (pos2.x + size2.x <= pos1.x)
- || (pos2.y >= pos1.y + size1.y)
- || (pos2.y + size2.y <= pos1.y))
- return false;
- else
- return true;
- }
- void startServer(float gameTime)
- {
- Game& game = Game::Instance();
- if(once) // Create the server
- {
- once = false;
- if (listener.listen(7000) == sf::Socket::Done) // si le serveur peut écouter le port
- selector.add(listener);
- else
- cout << "ecoute du port 7000 impossible" << endl;
- }
- game.GetBall()->move(); // deplace la balle (via une donnée fixe pour le moment)
- if(gameTime > lastTime+interval) // evite d'envoyer trop vite les données
- {
- lastTime = gameTime;
- if(clientList.size() > 0) // si il y'a au moins un joueur
- timeTimeout = 10;
- else
- timeTimeout = 0.1;
- if(collisionChecker(game.GetBall()->position,game.GetPlayerOne()->getPosition(), game.GetBall()->getSize(),game.GetPlayerOne()->getSize())
- || collisionChecker(game.GetBall()->position,game.GetPlayerTwo()->getPosition(), game.GetBall()->getSize(),game.GetPlayerTwo()->getSize()))
- {
- game.GetBall()->velocite = -game.GetBall()->velocite; // si collision inverse la trajectoire
- }
- if (selector.wait(sf::seconds(timeTimeout))) // else timeout
- {
- if(selector.isReady(listener)) //pending connection
- {
- TcpSocket* client = new TcpSocket;
- if(listener.accept(*client) == Socket::Done) // si le client est accepté
- {
- client->setBlocking(false);
- clientList.push_back(client);
- selector.add(*client);
- cout << "Connexion de : " << client->getRemoteAddress() << endl;
- Packet nbPlayer;
- nbPlayer <<clientList.size();
- cout << clientList.size() <<endl;;
- client->send(nbPlayer); // envoi le numero du joueur (joueur 1 / 2)
- }
- else //refused connection
- delete client;
- }
- if(clientList.size() > 0) // si il y a au moins un joueur
- {
- for(unsigned int i=0;i<clientList.size();i++)
- {
- sendBallPosition(clientList[i]); // envoi la position de la balle
- Packet answer;
- if(selector.isReady(*clientList[i])) // le client envoi un message
- {
- clientList[i]->receive(answer);
- int movementWant,player;
- if(answer >> movementWant >> player)
- {
- if(movementWant == LEFT)
- {
- if(player == PLAYER_ONE)
- game.GetPlayerOne()->move(Vector2f(-10,0));
- else if(player == PLAYER_TWO)
- game.GetPlayerTwo()->move(Vector2f(-10,0));
- }
- else if(movementWant == RIGHT)
- {
- if(player == PLAYER_ONE)
- game.GetPlayerOne()->move(Vector2f(10,0));
- else if(player == PLAYER_TWO)
- game.GetPlayerTwo()->move(Vector2f(10,0));
- }
- }
- }
- sendBarPosition(clientList[i]); // envoi la position des barres
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement