Package serveur

Source Code of serveur.GestionnaireServeur

package serveur;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import serveur.ServeurJeu;

import common.Joueur;
import common.Partie;
import common.Point;

/**
* Classe permettant la gestion des parties et des joueurs présents sur
* l'ensemble du serveur de jeu.
*
* A l'arrivée d'un joueur, ce dernier est automatiquement placé sur la première
* partie disponible. Si aucune partie n'est disponible, ce dernier reste en
* attente jusqu'à l'arrivée d'un adversaire.
*
*
* @author Aitelhaj brahim
*
*/
public class GestionnaireServeur {

  private HashMap parties;

  private ServeurJeu sj;

  // private int nbJoueurs;
  private Partie partieEnAttente;

  private int nbParties;

  private JxoServeur js;

  private int nbCasesPartie;

  /**
   *
   * @param js
   */
  public GestionnaireServeur(JxoServeur js) {
    this.js = js;
    parties = new HashMap();
    partieEnAttente = new Partie();
  }

  /**
   *
   * @param sj
   * @param nbCasesPartie
   */
  public GestionnaireServeur(ServeurJeu sj, int nbCasesPartie) {
    this.nbCasesPartie = nbCasesPartie;
    partieEnAttente = new Partie(nbCasesPartie);
    new GestionnaireServeur(sj);
  }

  /**
   *
   * @param sj
   */
  public GestionnaireServeur(ServeurJeu sj) {
    this.sj = sj;
    // parties = new ArrayList();
    parties = new HashMap();
    if (partieEnAttente == null)
      partieEnAttente = new Partie();
  }

  /**
   *
   *
   * @param p
   */
  public synchronized void finPartie(Partie p) {
    parties.remove(new Integer(p.getId()));
  }

  /**
   * Un joueur a joué un point, on prévient son adversaire
   *
   * @param pseudoJoueur
   * @param p
   */
  public synchronized Partie aJouer(String pseudoJoueur, Point p) {

    String adversaire = null;
    Partie partie = getPartie(pseudoJoueur);

    if (partie != null) {
      adversaire = partie.getAdversaire(pseudoJoueur);
      // System.out.println("GS("+pseudoJoueur+") aJouer, adversaire =>
      // "+adversaire);
      if (adversaire != null) {
        return jouer(partie, p);
      }
    }

    return partie;

  }

  /**
   *
   * @param partie
   * @param p
   * @return
   */
  public synchronized Partie aJouer(Partie partie, Point p) {
    if (partie == null) {
      return null;
    }

    return jouer(partie, p);

  }

  private synchronized Partie jouer(Partie partie, Point p) {
    Integer id = new Integer(partie.getId());
    Partie partieDeLaMap = (Partie) parties.get(id);
    partieDeLaMap.ajouterPoint(p);
    parties.put(id, partieDeLaMap);

    return partieDeLaMap;

  }

  public synchronized void putPartie(Partie p) {
    parties.put(new Integer(p.getId()), p);
  }

  public synchronized Partie getPartie(Partie p) {
    return (Partie) parties.get(new Integer(p.getId()));
  }

  /**
   *
   * @param pseudoJoueur
   */
  public Partie getPartie(String pseudoJoueur) {
    Iterator it = parties.values().iterator();
    Partie partie = null;
    while (it.hasNext()) {
      partie = (Partie) it.next();
      // Si la partie contient le joueur, on récupére le pseudo
      if (partie.contientJoueur(pseudoJoueur)) {
        return partie;
      }
    }

    return null;

  }

  /**
   *
   * @param p
   * @return
   */
  public Partie remettreAZeroPartie(Partie p) {
    p.remettreAZero();
    parties.put(new Integer(p.getId()), p);
    return p;
  }

  /**
   *
   * @param p
   */
  public void arreterPartie(Partie p) {
    parties.remove(new Integer(p.getId()));
    //nbParties--;
  }

  public void retirerJoueurEnAttente() {
    partieEnAttente.retirerJoueurs();
  }

 
 
 
 
  /**
   * Ajoute un joueur à la première partie disponible ou le met en attente A
   * l'arrivée du deuxième joueur, on créer la partie.
   *
   * @param j
   */
  public synchronized Partie ajouterJoueur(String pseudo) {

    partieEnAttente.ajouterJoueur(pseudo);
    // nbJoueurs++;

    // 2 Joueurs, on peut démarrer la partie
    if (partieEnAttente.estComplete()) {
      nbParties++;
      //System.out.println("NbParties = " + nbParties);

      Partie p = new Partie();
      p.setId(nbParties);
      p.ajouterJoueur(partieEnAttente.getJoueurCroixPseudo());
      p.ajouterJoueur(partieEnAttente.getJoueurRondPseudo());
      parties.put(new Integer(nbParties), p);

      try {
        // sj.partieCommence(partieEnAttente.getJoueurCroixPseudo(),
        // partieEnAttente.getJoueurRondPseudo());
        js.partieCommence(p.getJoueurCroixPseudo(), p
            .getJoueurRondPseudo());

      } catch (IOException ioe) {
        ioe.printStackTrace();
      }

      // System.out.println("GS = croix =
      // "+partieEnAttente.getJoueurCroixPseudo());
      // System.out.println("GS = rond =
      // "+partieEnAttente.getJoueurRondPseudo());

      partieEnAttente.retirerJoueurs();
      return p;

    }

    return null;

  }

}
TOP

Related Classes of serveur.GestionnaireServeur

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.