if (client == null)
return;
try {
Conteneur c;
BufferedInputStream bin = new BufferedInputStream(in);
while ((c = (Conteneur) Utils.deserialize(bin)) != null) {
// On récupére le message du client
if (c == null) {
System.out.println("Impossible de récupérer le message pour "+pseudo);
}
// Traitement des messages
if (c != null) {
String type = c.getTypeConteneur();
if(type.equals(TypeConteneur.JOUEUR)){
System.out.println("Arrivée d'un nouveau joueur");
}
else{
System.out.println("[SERVEUR] Le client "+pseudo+" a recu un Conteneur de Type "+
type+((pseudoAdversaire!=null)?" de la part de : "+pseudoAdversaire:""));
}
// RECEPTION D'UN JOUEUR
if (type.equals(TypeConteneur.JOUEUR)) {//ARRIVE D'UN NOUVEAU JOUEUR
Joueur j = (Joueur) c.getObject();
String pseudoCl = j.getPseudo();
if (joueurs.containsKey(pseudoCl)) {
// On prévient le client que ce pseudo est déja
// utilisé
//System.out.println("[SERVEUR] : "+pseudoCl+" Pseudo existant");
c = new Conteneur(
TypeConteneur.PSEUDO_EXISTANT, null);
envoyerConteneur(c, client);
return;
}
// On ajout ce client dans la liste des joueurs du
// serveur
ajouterJoueur(pseudoCl, client);
// On conserve son pseudo
this.pseudo = pseudoCl;
/*System.out.println("[Serveur] : Arrivée de => "
+ pseudo);*/
// On appelle le gestionnaire de connexion
dernierePartie = gs.ajouterJoueur(pseudo);
}else if(type.equals(TypeConteneur.RESTER)){//RESTER APRES DEPART DE L'ADVERSAIRE
dernierePartie = gs.ajouterJoueur(pseudo);
pseudoAdversaire = null;
}else if (type.equals(TypeConteneur.POINT)) {// RECEPTION D'UN POINT
// On récupére le pseudo du joueur associé à cet
// socket
// String pseudo =
// c.getPseudo();//(String)joueurs.get(client);
if (pseudo == null) {
return;
}
Point point = (Point) c.getObject();
// Création de la partie si elle n'existe pas
if (dernierePartie == null) {
dernierePartie = gs.aJouer(pseudo, point);
}
if (dernierePartie != null) {
if (pseudoAdversaire == null) {
pseudoAdversaire = dernierePartie
.getAdversaire(pseudo);
// System.out.println("[SERVEUR] Adversaire de "+pseudo+ " = "+pseudoAdversaire);
}
dernierePartie = gs.aJouer(dernierePartie, point);
boolean aGagne = dernierePartie
.aGagne(dernierePartie
.getSymbole(pseudo));
boolean matchNul = dernierePartie.matchNul();
//System.out.println("aGagné = "+aGagne);
Socket socketAdversaire = (Socket) joueurs
.get(pseudoAdversaire);
Conteneur cAdversaire = null;
Conteneur cMatchNul = new Conteneur(TypeConteneur.MATCH_NUL,null);
if (aGagne) { // VICTOIRE DE CE CLIENT
// L'adversaire a perdu, on lui envoit le
// point et le résultat de la partie
// On envoit le résultat au gagnant
// également
// On termine la partie
cAdversaire = new Conteneur(
TypeConteneur.PERDU, point);
Conteneur cGagnant = new Conteneur(
TypeConteneur.GAGNE, null);
envoyerConteneur(cGagnant, client);
} else if(matchNul){ // MATCH NUL
envoyerConteneur(cMatchNul, client);
cAdversaire = cMatchNul;
}else { // PERDU
System.out.println("CAS INEXISTANT ");
// On Envoie seulement le point à
// l'adversaire
cAdversaire = new Conteneur(
TypeConteneur.POINT, point);
}
// On envoie les conteneurs apropriés à chacun des joueurs
if (socketAdversaire != null
&& cAdversaire != null) {
envoyerConteneur(cAdversaire,
socketAdversaire);
}
}
}else if( (type.equals(TypeConteneur.REJOUER_OK)) ||
(type.equals(TypeConteneur.REJOUER_KO)) ){
// On remet à zero la partie et on peut y aller
//dernierePartie = gs.remettreAZeroPartie(dernierePartie);
dernierePartie = gs.getPartie(dernierePartie);
if(dernierePartie == null){
//System.out.println("Plus de partie, l'autre est parti !");
}else{
if(type.equals(TypeConteneur.REJOUER_OK)){
dernierePartie.addOk();
lastChoice = OK;
System.out.println("[SERVEUR] => Je veux rejouer = "+dernierePartie.getNbOk());
}else if(type.equals(TypeConteneur.REJOUER_KO)){
dernierePartie.addKo();
lastChoice = KO;
}
//On remet à jour la partie sur le gestionnaire
//gs.putPartie(dernierePartie);
if(dernierePartie.getKoAndOk() == 2){
// Fin de partie
Socket socketAdversaire = (Socket) joueurs
.get(pseudoAdversaire);
if(dernierePartie.getNbOk() == 2){
// On remet à jour la partie sur le gestionnaire
//System.out.println("Deux ok !");
Conteneur conteneur = new Conteneur(TypeConteneur.REJOUER_OK,null);
//Message pour rejouer au 2
envoyerConteneur(conteneur,client);
envoyerConteneur(conteneur,socketAdversaire);
}else{
// On ne rejoue pas
if(lastChoice.equals(OK)){
Conteneur conteneur = new Conteneur(TypeConteneur.ATTENTE,null);
//System.out.println("[SERVEUR] "+pseudo+" ATTENTE !");
//On arrete la partie
gs.arreterPartie(dernierePartie);
dernierePartie = gs.ajouterJoueur(pseudo);
pseudoAdversaire = null;
//Message pour rejouer au 2
envoyerConteneur(conteneur,client);
}else{
Conteneur conteneur = new Conteneur(TypeConteneur.REJOUER_KO,null);
//Message de fin
envoyerConteneur(conteneur,socketAdversaire);
}
}
// On arrete la partie
dernierePartie.remettreAZero();
dernierePartie.initKoAndOk();
}
//On remet à jour la partie sur le gestionnaire
gs.putPartie(dernierePartie);
}
}
}
}
} catch (ClassNotFoundException cnf) {
// cnf.printStackTrace();
System.out.println(cnf);
} catch (NullPointerException npe) {
// npe.printStackTrace();
//System.out.println(npe);
npe.printStackTrace();
} catch (IOException ioe) {
System.out.println(pseudo + " s'est deconnecté ");
if (pseudoAdversaire != null) {
Socket socketAdversaire = (Socket) joueurs
.get(pseudoAdversaire);
Conteneur cAdversaire = new Conteneur(
TypeConteneur.DECO_ADVERSAIRE, null);
try {
//On regarde si l'adversair existe encore
if(socketAdversaire != null){
gs.arreterPartie(dernierePartie);