TraitementComServeurPrincipal Class Reference

Implémentation d'un thread communiquant avec le serveur principal. More...

#include <TraitementComServeurPrincipal.h>

Inheritance diagram for TraitementComServeurPrincipal:

Inheritance graph
[legend]
Collaboration diagram for TraitementComServeurPrincipal:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TraitementComServeurPrincipal (unsigned int port)
 ~TraitementComServeurPrincipal ()
void * Traitement ()
 On initialise le protocole avec le serveur principal
On indique ensuite qu'on est pret à recevoir des clients
On indique ensuite qu'on attend les joueurs en on signale chaque connexion On donne le status toutes les secondes une fois que la partie est démarrée
On indique enfin que la partie est terminée.

Private Member Functions

void HandShake ()
void IndiquerAttenteJoueurs ()
void IndiquerConnexions ()
void IndiquerDebutPartie ()
void IndiquerStatusPartie ()
void IndiquerFinPartie ()

Private Attributes

SocketmSocket
 Pointeur sur la socket.
JeumJeu
 Pointeur sur le singleton gérant la partie.

Detailed Description

Implémentation d'un thread communiquant avec le serveur principal.

Definition at line 40 of file TraitementComServeurPrincipal.h.


Constructor & Destructor Documentation

TraitementComServeurPrincipal::TraitementComServeurPrincipal ( unsigned int  port  ) 

Definition at line 24 of file TraitementComServeurPrincipal.cpp.

References SocketException::Afficher(), Singleton< T >::GetInstance(), mJeu, and mSocket.

00024                                                                              {
00025         mJeu=Jeu::GetInstance();
00026         //On établit une connexion vers le serveur principal 
00027         cout<<endl<<"    SJ TraitementComServeurPrincipal::Création d'un thread de communication UDP avec le serveur principal sur le port "<<port<<endl;
00028         //On établit une connexion avec le serveur principal
00029         try{
00030                 mSocket=new SocketUDP("localhost",(unsigned int)port);
00031         } catch(SocketException s){ s.Afficher(); }
00032 }

Here is the call graph for this function:

TraitementComServeurPrincipal::~TraitementComServeurPrincipal (  ) 

Definition at line 34 of file TraitementComServeurPrincipal.cpp.

References mSocket.

00034                                                              {
00035         cout<<"      SJ TraitementComServeurPrincipal::Destruction du thread de communication avec le serveur principal"<<endl;
00036         if(mSocket!=NULL) delete mSocket;
00037 }


Member Function Documentation

void * TraitementComServeurPrincipal::Traitement (  )  [virtual]

On initialise le protocole avec le serveur principal
On indique ensuite qu'on est pret à recevoir des clients
On indique ensuite qu'on attend les joueurs en on signale chaque connexion On donne le status toutes les secondes une fois que la partie est démarrée
On indique enfin que la partie est terminée.

..

Returns:
NULL

Implements Thread.

Definition at line 39 of file TraitementComServeurPrincipal.cpp.

References HandShake(), IndiquerAttenteJoueurs(), IndiquerConnexions(), IndiquerDebutPartie(), IndiquerFinPartie(), and IndiquerStatusPartie().

00039                                                {
00040         HandShake();
00041         IndiquerAttenteJoueurs();
00042         IndiquerConnexions();
00043         IndiquerDebutPartie();
00044         IndiquerStatusPartie();
00045         IndiquerFinPartie();
00046 }

Here is the call graph for this function:

void TraitementComServeurPrincipal::HandShake (  )  [private]

Definition at line 48 of file TraitementComServeurPrincipal.cpp.

References Socket::Ecouter(), Socket::Envoyer(), and mSocket.

Referenced by Traitement().

00048                                              {
00049         mSocket->Envoyer("HELLO");
00050         if(mSocket->Ecouter()=="HELLO"){
00051                 cout<<"    SJ TraitementComServeurPrincipal::Le serveur principal a répondu à la poignée de main UDP"<<endl;
00052         }
00053 }

Here is the call graph for this function:

void TraitementComServeurPrincipal::IndiquerAttenteJoueurs (  )  [private]

Definition at line 55 of file TraitementComServeurPrincipal.cpp.

References Socket::Ecouter(), Socket::Envoyer(), Jeu::GetNbFantomeAuto(), mJeu, and mSocket.

Referenced by Traitement().

00055                                                           {
00056         //On indique au serveur principal que l'on est en attente des joueurs 
00057         string cmd;
00058         cmd="WAITING ";
00059         ostringstream oss;
00060         oss<<mJeu->GetNbFantomeAuto();
00061         cmd+=oss.str();
00062         cout<<"    SJ TraitementComServeurPrincipal::On indique au serveur de jeu que le jeu n'est pas pret "<<endl;
00063         mSocket->Envoyer(cmd);
00064         mSocket->Ecouter();
00065 }

Here is the call graph for this function:

void TraitementComServeurPrincipal::IndiquerConnexions (  )  [private]

Definition at line 67 of file TraitementComServeurPrincipal.cpp.

References Socket::Envoyer(), Jeu::GetFConnecte(), Jeu::GetLoginF(), Jeu::GetLoginPacman(), Jeu::GetPacmanConnecte(), mJeu, and mSocket.

Referenced by Traitement().

00067                                                       {
00068         //On attend que tout les joueurs soient prets
00069         string cmd;
00070         bool pacman=false, f[3];
00071         for(unsigned int i=0; i<3; i++) f[i]=false;
00072         while(1){
00073                 //On cherche si des nouvelles places ont été choisies et on l'en informe le serveur de jeu
00074                 if(!pacman) if(mJeu->GetPacmanConnecte()){
00075                         cout<<"    SJ TraitementComServeurPrincipal::On indique au serveur de jeu que pacman vient de se connecter"<<endl;
00076                         cmd="SET PACMAN "; cmd+=mJeu->GetLoginPacman();
00077                         mSocket->Envoyer(cmd);
00078                         pacman=true;
00079                 }
00080                 for(unsigned int i=0; i<3; i++){
00081                         if(!f[i]) if(mJeu->GetFConnecte(i)){
00082                                 cout<<"    SJ TraitementComServeurPrincipal::On indique au serveur de jeu que le fantome "<<i<<" vient de se connecter"<<endl;  
00083                                 ostringstream oss;
00084                                 oss<<i;
00085                                 string no=oss.str();
00086                                 cmd="SET F "; cmd+=mJeu->GetLoginF(i);  cmd+=" ";  cmd+=no;
00087                                 mSocket->Envoyer(cmd);
00088                                 f[i]=true;
00089                         }
00090                 }
00091                 if(pacman){
00092                         bool tousConnecte=true;
00093                         for(unsigned int i=0; i<3; i++){
00094                                 if(!f[i]) tousConnecte=false;
00095                         }
00096                         if(tousConnecte){
00097                                 //Tous les joueurs sont connectés ET on l'a bien annoncé au serveur principal 
00098                                 break;
00099                         }
00100                 }
00101                 sleep(1);
00102         }
00103 }

Here is the call graph for this function:

void TraitementComServeurPrincipal::IndiquerDebutPartie (  )  [private]

Definition at line 105 of file TraitementComServeurPrincipal.cpp.

References Socket::Ecouter(), Socket::Envoyer(), and mSocket.

Referenced by Traitement().

00105                                                        {
00106         cout<<"    SJ TraitementComServeurPrincipal::On indique au serveur de jeu que tous les joueurs sont connectés"<<endl;
00107         mSocket->Envoyer("READY");
00108         mSocket->Ecouter();     
00109 }

Here is the call graph for this function:

void TraitementComServeurPrincipal::IndiquerStatusPartie (  )  [private]

Definition at line 111 of file TraitementComServeurPrincipal.cpp.

References Socket::Envoyer(), Jeu::EtatPartie(), Jeu::GameOver(), mJeu, and mSocket.

Referenced by Traitement().

00111                                                         {
00112         while(!mJeu->GameOver()){
00113                 string envoi="STATUS "; envoi+=mJeu->EtatPartie();
00114                 mSocket->Envoyer(envoi);
00115                 sleep(1);
00116         }
00117 }

Here is the call graph for this function:

void TraitementComServeurPrincipal::IndiquerFinPartie (  )  [private]

Definition at line 119 of file TraitementComServeurPrincipal.cpp.

References Socket::Envoyer(), Jeu::EtatPartie(), mJeu, and mSocket.

Referenced by Traitement().

00119                                                      {
00120         //La partie est terminée, on le signifie au serveur principal 
00121         //On envoi le status du jeu final 
00122         string envoi="STATUS "; envoi+=mJeu->EtatPartie();
00123         mSocket->Envoyer(envoi);
00124         cout<<"    SJ TraitementComServeurPrincipal::On indique au serveur principal que la partie est terminée"<<endl;
00125         mSocket->Envoyer("GAME OVER");
00126 }

Here is the call graph for this function:


Member Data Documentation

Socket* TraitementComServeurPrincipal::mSocket [private]

Pointeur sur la socket.

Definition at line 65 of file TraitementComServeurPrincipal.h.

Referenced by HandShake(), IndiquerAttenteJoueurs(), IndiquerConnexions(), IndiquerDebutPartie(), IndiquerFinPartie(), IndiquerStatusPartie(), TraitementComServeurPrincipal(), and ~TraitementComServeurPrincipal().

Jeu* TraitementComServeurPrincipal::mJeu [private]

Pointeur sur le singleton gérant la partie.

Definition at line 70 of file TraitementComServeurPrincipal.h.

Referenced by IndiquerAttenteJoueurs(), IndiquerConnexions(), IndiquerFinPartie(), IndiquerStatusPartie(), and TraitementComServeurPrincipal().


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