Advertisement
Guest User

Untitled

a guest
Jun 18th, 2013
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.03 KB | None | 0 0
  1. #include "server.h"
  2. #include <iostream>
  3. #include <SFGUI\SFGUI.hpp>
  4. #include <SFML\Network.hpp>
  5. #include <SFML/Graphics.hpp>
  6. #include "Structure.h"
  7. #include "Propriete.h"
  8. #include "Affichage.h"
  9. #include "Interface.h"
  10. #include <iostream>
  11. #include "Constante.h"
  12. #include "Game.h"
  13.  
  14. using namespace std;
  15. using namespace sf;
  16.  
  17. bool once=true;
  18. std::string text;
  19. TcpListener listener;
  20. SocketSelector selector;
  21. vector<sf::TcpSocket* > clientList;
  22. float timeTimeout = 0,interval = 0.01,lastTime = 0;
  23.  
  24. void sendBallPosition(TcpSocket* client) // Envoi de la position de la balle aux clients
  25. {
  26.     Game& game = Game::Instance();
  27.  
  28.     sf::Packet posBall;
  29.     posBall << game.GetBall()->position.x << game.GetBall()->position.y;
  30.     client->send(posBall);
  31. }
  32.  
  33. void sendBarPosition(TcpSocket* client) // Envoi la position des barres aux clients
  34. {
  35.     Game& game = Game::Instance();
  36.  
  37.     sf::Packet posBar;
  38.     posBar << game.GetPlayerOne()->getPosition().x << game.GetPlayerOne()->getPosition().y<< game.GetPlayerTwo()->getPosition().x << game.GetPlayerTwo()->getPosition().y;
  39.  
  40.     client->send(posBar);
  41. }
  42.  
  43. bool collisionChecker(sf::Vector2f pos1,sf::Vector2f pos2,sf::Vector2f size1,sf::Vector2f size2) // vérifie les collisions
  44. {
  45.     if((pos2.x >= pos1.x + size1.x)      
  46.         || (pos2.x + size2.x <= pos1.x)
  47.         || (pos2.y >= pos1.y + size1.y)
  48.         || (pos2.y + size2.y <= pos1.y))  
  49.         return false;
  50.     else
  51.         return true;
  52. }
  53.  
  54. void startServer(float gameTime)
  55. {
  56.     Game& game = Game::Instance();
  57.     if(once) // Create the server
  58.     {
  59.         once = false;
  60.         if (listener.listen(7000) == sf::Socket::Done) // si le serveur peut écouter le port
  61.             selector.add(listener);
  62.         else
  63.             cout << "ecoute du port 7000 impossible" << endl;
  64.     }
  65.  
  66.     game.GetBall()->move(); // deplace la balle (via une donnée fixe pour le moment)
  67.     if(gameTime > lastTime+interval) // evite d'envoyer trop vite les données
  68.     {
  69.         lastTime = gameTime;
  70.         if(clientList.size() > 0) // si il y'a au moins un joueur
  71.             timeTimeout = 10;
  72.         else
  73.             timeTimeout = 0.1;
  74.  
  75.         if(collisionChecker(game.GetBall()->position,game.GetPlayerOne()->getPosition(), game.GetBall()->getSize(),game.GetPlayerOne()->getSize())
  76.             || collisionChecker(game.GetBall()->position,game.GetPlayerTwo()->getPosition(), game.GetBall()->getSize(),game.GetPlayerTwo()->getSize()))
  77.         {
  78.             game.GetBall()->velocite = -game.GetBall()->velocite; // si collision inverse la trajectoire
  79.         }
  80.  
  81.         if (selector.wait(sf::seconds(timeTimeout))) // else timeout
  82.         {
  83.             if(selector.isReady(listener)) //pending connection
  84.             {
  85.                 TcpSocket* client = new TcpSocket;
  86.                 if(listener.accept(*client) == Socket::Done) // si le client est accepté
  87.                 {
  88.                     client->setBlocking(false);
  89.                     clientList.push_back(client);
  90.                     selector.add(*client);
  91.                     cout << "Connexion de : " << client->getRemoteAddress() << endl;
  92.  
  93.                     Packet nbPlayer;
  94.                     nbPlayer <<clientList.size();
  95.                     cout << clientList.size() <<endl;;
  96.                     client->send(nbPlayer); // envoi le numero du joueur (joueur 1 / 2)
  97.                 }
  98.                 else //refused connection              
  99.                     delete client;
  100.             }
  101.             if(clientList.size() > 0) // si il y a au moins un joueur
  102.             {
  103.                 for(unsigned int i=0;i<clientList.size();i++)
  104.                 {
  105.                     sendBallPosition(clientList[i]); // envoi la position de la balle
  106.                     Packet answer;
  107.                     if(selector.isReady(*clientList[i])) // le client envoi un message
  108.                     {
  109.                         clientList[i]->receive(answer);
  110.                         int movementWant,player;
  111.                         if(answer >> movementWant >> player)
  112.                         {
  113.                             if(movementWant == LEFT)
  114.                             {
  115.                                 if(player == PLAYER_ONE)
  116.                                     game.GetPlayerOne()->move(Vector2f(-10,0));
  117.                                 else if(player == PLAYER_TWO)
  118.                                     game.GetPlayerTwo()->move(Vector2f(-10,0));                        
  119.                             }
  120.                             else if(movementWant == RIGHT)
  121.                             {
  122.                                 if(player == PLAYER_ONE)
  123.                                     game.GetPlayerOne()->move(Vector2f(10,0));
  124.                                 else if(player == PLAYER_TWO)
  125.                                     game.GetPlayerTwo()->move(Vector2f(10,0));
  126.                             }
  127.  
  128.                         }
  129.                     }
  130.                     sendBarPosition(clientList[i]); // envoi la position des barres
  131.                 }
  132.             }
  133.         }      
  134.     }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement