TraitementComServeurJeu Class Reference

Implémentation d'un thread écoutant un serveur de jeu en UDP. More...

#include <TraitementComServeurJeu.h>

Inheritance diagram for TraitementComServeurJeu:

Inheritance graph
[legend]
Collaboration diagram for TraitementComServeurJeu:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TraitementComServeurJeu (unsigned int port)
 Constructeur.
 ~TraitementComServeurJeu ()
void * Traitement ()
 On attend que le serveur de jeu initialise le protocole (on peut ensuite lui envoyer des messages en UDP)
Il nous indique ensuite quand il est pret à recevoir les clients (le thread de type TraitementClient lui donne alors le port TCP ou joindre le serveur de jeu)
Il nous indique ensuite qu'il attend les joueurs en nous signale chaque connexion (on met à jour le singleton gérant les parties)
Il nous donne son status toutes les secondes une fois que la partie est démarrée (on met à jour le singleton gérant les parties)
Il nous indique enfin que la partie est terminée.
bool EstPret ()

Private Member Functions

void TraiterHello (string cmd)
void TraiterServeurJeuPret (string cmd)
void TraiterAttenteJoueur (string cmd)
void TraiterConnexionJoueur (string cmd)
void TraiterReceptionStatus (string cmd)
void TraiterFinPartie (string cmd)

Private Attributes

SocketmSocket
 Pointeur sur la socket.
bool mSJReady
 Booléen indiquant que le serveur de jeu est prêt.
unsigned int mPort
 Port d'écoute UDP.
PartiemPartie
 Pointeur sur le singleton gérant les parties en cours.
BdDmBdD
 Pointeur sur le singleton gérant les utilisateurs.

Detailed Description

Implémentation d'un thread écoutant un serveur de jeu en UDP.

Definition at line 41 of file TraitementComServeurJeu.h.


Constructor & Destructor Documentation

TraitementComServeurJeu::TraitementComServeurJeu ( unsigned int  port  ) 

Constructeur.

Parameters:
port Port UDP sur lequel on écoute le serveur de jeu.
Returns:

Definition at line 23 of file TraitementComServeurJeu.cpp.

References SocketException::Afficher(), Singleton< T >::GetInstance(), mBdD, mPartie, mPort, mSJReady, and mSocket.

00023                                                                  {
00024         mPort=port;
00025         mPartie=Partie::GetInstance();
00026         mBdD=BdD::GetInstance();
00027         mSJReady=false;
00028         cout<<endl<<"  SP TraitementComServeurJeu::Création d'un thread pour la communication avec un serveur de jeu sur le port "<<port<<endl;
00029         try{
00030                 mSocket=new SocketUDP((unsigned int)port);
00031         } catch(SocketException s){ s.Afficher(); }
00032 }

Here is the call graph for this function:

TraitementComServeurJeu::~TraitementComServeurJeu (  ) 

Definition at line 34 of file TraitementComServeurJeu.cpp.

References mSocket.

00034                                                  {
00035         if(mSocket!=NULL) delete mSocket;
00036         
00037 }


Member Function Documentation

void * TraitementComServeurJeu::Traitement (  )  [virtual]

On attend que le serveur de jeu initialise le protocole (on peut ensuite lui envoyer des messages en UDP)
Il nous indique ensuite quand il est pret à recevoir les clients (le thread de type TraitementClient lui donne alors le port TCP ou joindre le serveur de jeu)
Il nous indique ensuite qu'il attend les joueurs en nous signale chaque connexion (on met à jour le singleton gérant les parties)
Il nous donne son status toutes les secondes une fois que la partie est démarrée (on met à jour le singleton gérant les parties)
Il nous indique enfin que la partie est terminée.

. (on met à jour le singleton gérant la base de donnée pour les scores)

Returns:
NULL

Implements Thread.

Definition at line 38 of file TraitementComServeurJeu.cpp.

References Socket::Ecouter(), Socket::Envoyer(), mSocket, TraiterAttenteJoueur(), TraiterConnexionJoueur(), TraiterFinPartie(), TraiterHello(), TraiterReceptionStatus(), and TraiterServeurJeuPret().

00038                                          {
00039         while(1){
00040                 string cmd=mSocket->Ecouter();
00041                 //On passe la chaine à toutes les méthodes en vue d'un éventuel traitement 
00042                 TraiterHello(cmd);
00043                 TraiterAttenteJoueur(cmd);      
00044                 TraiterConnexionJoueur(cmd);
00045                 TraiterServeurJeuPret(cmd);
00046                 TraiterReceptionStatus(cmd);
00047                 TraiterFinPartie(cmd);
00048                 //Si aucune commande appropriée a été reçue on la renvoie
00049                 mSocket->Envoyer(cmd);
00050         }
00051         return NULL;
00052 }

Here is the call graph for this function:

bool TraitementComServeurJeu::EstPret (  )  [inline]

Definition at line 60 of file TraitementComServeurJeu.h.

References mSJReady.

Referenced by TraitementClient::CreerOuRejoindrePartie().

00060 { return mSJReady; }

void TraitementComServeurJeu::TraiterHello ( string  cmd  )  [private]

Definition at line 54 of file TraitementComServeurJeu.cpp.

References Partie::AjouterPartie(), Socket::Envoyer(), mPartie, mPort, mSJReady, and mSocket.

Referenced by Traitement().

00054                                                     {
00055         if(cmd=="HELLO"){
00056                 cout<<"  SP TraitementComServeurJeu::Le serveur de jeu a initialisé le protocole de communication UDP"<<endl;
00057                 mSocket->Envoyer(cmd);
00058                 //On ajoute la partie 
00059                 mPartie->AjouterPartie(mPort);
00060                 mSJReady=true;
00061         }
00062 }

Here is the call graph for this function:

void TraitementComServeurJeu::TraiterServeurJeuPret ( string  cmd  )  [private]

Definition at line 64 of file TraitementComServeurJeu.cpp.

References Socket::Envoyer(), and mSocket.

Referenced by Traitement().

00064                                                              {
00065         if(cmd=="READY"){
00066                 cout<<"  SP TraitementComServeurJeu::Le serveur de jeu nous indique que la partie commence"<<endl;
00067                 mSocket->Envoyer(cmd);
00068         }
00069 }

Here is the call graph for this function:

void TraitementComServeurJeu::TraiterAttenteJoueur ( string  cmd  )  [private]

Definition at line 71 of file TraitementComServeurJeu.cpp.

References Socket::Envoyer(), mPartie, mPort, mSocket, and Partie::SetNbFantomeAuto().

Referenced by Traitement().

00071                                                             {
00072         istringstream iss(cmd);
00073         string arg1, arg2;
00074         getline(iss,arg1,' '); 
00075         if(arg1=="WAITING"){
00076                 getline(iss,arg2,' '); 
00077                 cout<<" SP TraitementComServeurJeu::Le serveur de jeu attend la connexion de tous les joueurs ("<<arg2<<" fantomes automatiques)"<<endl;
00078                 istringstream iss(arg2);
00079                 unsigned int nbFantome;
00080                 iss>>nbFantome;
00081                 mPartie->SetNbFantomeAuto(mPort,nbFantome);
00082                 mSocket->Envoyer(cmd);
00083         }
00084 }

Here is the call graph for this function:

void TraitementComServeurJeu::TraiterConnexionJoueur ( string  cmd  )  [private]

Definition at line 86 of file TraitementComServeurJeu.cpp.

References mPartie, mPort, Partie::SetLoginF(), Partie::SetLoginPacman(), Partie::SetScoreF(), and Partie::SetScorePacman().

Referenced by Traitement().

00086                                                               {
00087         istringstream iss(cmd);
00088         string arg1, arg2, arg3, arg4;
00089         getline(iss,arg1,' '); 
00090         if(arg1=="SET"){
00091                 getline(iss,arg2,' '); 
00092                 if(arg2=="PACMAN"){
00093                         getline(iss,arg3,' ');
00094                         cout<<"  SP TraitementComServeurJeu::Le serveur de jeu nous indique que pacman ("<<arg3<<") vient de se connecter"<<endl;
00095                         mPartie->SetLoginPacman(mPort,arg3);
00096                         mPartie->SetScorePacman(mPort,0);
00097                 }
00098                 if(arg2=="F"){
00099                         getline(iss,arg3,' '); 
00100                         getline(iss,arg4,' '); 
00101                         cout<<"  SP TraitementComServeurJeu::Le serveur de jeu nous indique qu'un fantome ("<<arg3<<") vient de se connecter"<<endl;
00102                         istringstream iss(arg4);
00103                         unsigned int noFantome;
00104                         iss>>noFantome;
00105                         mPartie->SetLoginF(mPort,noFantome,arg3);
00106                         mPartie->SetScoreF(mPort,noFantome,0);
00107                 }
00108         }
00109 }

Here is the call graph for this function:

void TraitementComServeurJeu::TraiterReceptionStatus ( string  cmd  )  [private]

Definition at line 111 of file TraitementComServeurJeu.cpp.

References Socket::Envoyer(), mPartie, mPort, mSocket, Partie::SetScoreF(), and Partie::SetScorePacman().

Referenced by Traitement().

00111                                                               {
00112         istringstream iss(cmd);
00113         string arg1;
00114         getline(iss,arg1,' '); 
00115         if(arg1=="STATUS"){
00116                 string loginP, scoreP, loginF1, scoreF1, loginF2, scoreF2, loginF3, scoreF3, nbPomme, status;
00117                 getline(iss,loginP,' '); getline(iss,scoreP,' '); getline(iss,loginF1,' '); getline(iss,scoreF1,' '); 
00118                 getline(iss,loginF2,' '); getline(iss,scoreF2,' '); getline(iss,loginF3,' '); getline(iss,scoreF3,' '); 
00119                 getline(iss,nbPomme,' '); getline(iss,status,' '); 
00120                 unsigned int sP, sF1, sF2, sF3;
00121                 istringstream iss1(scoreP), iss2(scoreF1), iss3(scoreF2), iss4(scoreF3);
00122                 iss1>>sP; iss2>>sF1; iss3>>sF2; iss4>>sF3;
00123                 if(loginP!="hotplug") mPartie->SetScorePacman(mPort,sP); 
00124                 if(loginF1!="hotplug") mPartie->SetScoreF(mPort,0,sF1); 
00125                 if(loginF2!="hotplug")mPartie->SetScoreF(mPort,1,sF2); 
00126                 if(loginF3!="hotplug") mPartie->SetScoreF(mPort,2,sF3);
00127                 mSocket->Envoyer(cmd);
00128         }
00129 }

Here is the call graph for this function:

void TraitementComServeurJeu::TraiterFinPartie ( string  cmd  )  [private]

Definition at line 131 of file TraitementComServeurJeu.cpp.

References Partie::GetLoginF(), Partie::GetLoginPacman(), BdD::GetScore(), Partie::GetScoreF(), Partie::GetScorePacman(), mBdD, mPartie, mPort, BdD::Sauvegarder(), BdD::SetScore(), and Partie::SupprimerPartie().

Referenced by Traitement().

00131                                                         {
00132         if(cmd=="GAME OVER"){
00133                 cout<<" SP TraitementComServeurJeu::Le serveur de jeu nous indique que la partie est terminée"<<endl;
00134                 //On met a jour les scores 
00135                 string loginP=mPartie->GetLoginPacman(mPort);
00136                 if(loginP!="hotplug"){
00137                 unsigned int scoreP=mBdD->GetScore(loginP);
00138                 scoreP+=mPartie->GetScorePacman(mPort);
00139                 mBdD->SetScore(loginP,scoreP);
00140                 }
00141                 string loginF1=mPartie->GetLoginF(mPort,0);
00142                 if((loginF1!="auto")&&(loginF1!="hotplug")){
00143                         unsigned int scoreF1=mBdD->GetScore(loginF1);
00144                         scoreF1+=mPartie->GetScoreF(mPort,0);
00145                         mBdD->SetScore(loginF1,scoreF1);                
00146                 }
00147                 string loginF2=mPartie->GetLoginF(mPort,1);
00148                 if((loginF2!="auto")&&(loginF2!="hotplug")){
00149                         unsigned int scoreF2=mBdD->GetScore(loginF2);
00150                         scoreF2+=mPartie->GetScoreF(mPort,1);
00151                         mBdD->SetScore(loginF2,scoreF2);                
00152                 }
00153                 string loginF3=mPartie->GetLoginF(mPort,2);
00154                 if((loginF3!="auto")&&(loginF3!="hotplug")){
00155                         unsigned int scoreF3=mBdD->GetScore(loginF3);
00156                         scoreF3+=mPartie->GetScoreF(mPort,2);
00157                         mBdD->SetScore(loginF3,scoreF3);                
00158                 }
00159                 //On sauvegarde 
00160                 mBdD->Sauvegarder();
00161                 //On supprime la partie 
00162                 mPartie->SupprimerPartie(mPort);
00163         }
00164 }

Here is the call graph for this function:


Member Data Documentation

Socket* TraitementComServeurJeu::mSocket [private]

Pointeur sur la socket.

Definition at line 72 of file TraitementComServeurJeu.h.

Referenced by Traitement(), TraitementComServeurJeu(), TraiterAttenteJoueur(), TraiterHello(), TraiterReceptionStatus(), TraiterServeurJeuPret(), and ~TraitementComServeurJeu().

bool TraitementComServeurJeu::mSJReady [private]

Booléen indiquant que le serveur de jeu est prêt.

Definition at line 77 of file TraitementComServeurJeu.h.

Referenced by EstPret(), TraitementComServeurJeu(), and TraiterHello().

unsigned int TraitementComServeurJeu::mPort [private]

Port d'écoute UDP.

Definition at line 82 of file TraitementComServeurJeu.h.

Referenced by TraitementComServeurJeu(), TraiterAttenteJoueur(), TraiterConnexionJoueur(), TraiterFinPartie(), TraiterHello(), and TraiterReceptionStatus().

Partie* TraitementComServeurJeu::mPartie [private]

Pointeur sur le singleton gérant les parties en cours.

Definition at line 87 of file TraitementComServeurJeu.h.

Referenced by TraitementComServeurJeu(), TraiterAttenteJoueur(), TraiterConnexionJoueur(), TraiterFinPartie(), TraiterHello(), and TraiterReceptionStatus().

BdD* TraitementComServeurJeu::mBdD [private]

Pointeur sur le singleton gérant les utilisateurs.

Definition at line 92 of file TraitementComServeurJeu.h.

Referenced by TraitementComServeurJeu(), and TraiterFinPartie().


The documentation for this class was generated from the following files:
Generated on Wed Jan 2 14:02:20 2008 for Pacman by  doxygen 1.5.1