Esempio n. 1
0
        /// <summary>
        /// Méthode threadée. Permet de suivre un client
        /// </summary>
        /// <param name="socket">Socket conecté au client</param>
        public void TraiterClient(Object socket)
        {
            var client = (Socket)socket;
            var buffer = new byte[2048];
            //recevoir hors boucle la premiere communication du client : message comportant son port d'ecoute
            client.Receive(buffer);
            var ipep = (IPEndPoint)client.RemoteEndPoint;
            var j = new Joueur("Test", ipep.Address);
            var tempor = MessageFactory.DecoderMessage(buffer);//, this);
            InterpreterMessage(tempor, j);
            var cp = new CoupleIpPort(ipep.Address, j.EmetteurJoueur.Port());
            Console.WriteLine("Nouveau client : " + ipep.Address + ":" + j.EmetteurJoueur.Port());
            this.Annuaire.Add(cp, j);
            j.EmetteurJoueur.Connecter();

            while (true)
            {
                try
                {
                    client.Receive(buffer);
                    //on recupere le emssage
                    var temp = MessageFactory.DecoderMessage(buffer);//, this);
                    InterpreterMessage(temp, j);

                }
                catch (SocketException)
                {

                    this.TraiterDeconnection(j,cp);

                    break;

                }
                catch (Exception e)
                {
                    Console.WriteLine(e.ToString());
                }

            }
        }
Esempio n. 2
0
 private void TraiterDeconnection(Joueur j, CoupleIpPort cp)
 {
     j.EmetteurJoueur.Deconnecter();
     var liste = CalculerListJouersAPrevenir(j);
     var mess = MessageFactory.GetInstanceOf(TypeMessage.DeconnexionJoueur);
     mess.PreparerMessage(j.UiUnique);
     this.InformerListeJoueur(liste, j, mess);
     this.Annuaire.Remove(cp);
     Contenu.Values.FirstOrDefault(x => x.Contains(j)).RetirerJoueur(j);
 }
Esempio n. 3
0
        public void DemandeDeplacement(string p, IEmetteur emm)
        {
            Console.WriteLine("Chemin demandé : " + p);
            IMessage temp = MessageFactory.GetInstanceOf(TypeMessage.ReponseDeplacement);
            Chemin c = Chemin.GetFromString(p);
            //notifier autres joueurs
            var t = new CoupleIpPort(emm.adresse(), emm.Port());
            //trouver le joueur
            var j = (Joueur)this.Annuaire[t];
            Console.WriteLine(c);
            var result = this.VerifierChemin(c, j);
            temp.PreparerMessage(new object[] { result.ToString() });
            emm.envoyer(temp);
            if (result)
            {

                //puis recuperer la listejoueur de ceux de son écran
                //à optimiser
                //TODO:DEBUG ICI
                //var lj = Contenu.Values.Where(l => l.Contains(j)).FirstOrDefault();
                ListeJoueur lj = CalculerListJouersAPrevenir(j);

                j.Position = c.AppliquerAPosition(j.Position);

                //ici lj contient l'ensemble des joueurs de la carte

                if (lj != null)
                    NotifierDeplacement(c, j, lj);
                else
                    Console.WriteLine("pas de jouers à notif pour le deplacement de " + j.UiUnique);
                //this.NotifierDeplacement(c,j,lj) - chemin, joueurs qui bouge, liste des joueurs à notifier
            }
            else
            {
                Console.WriteLine("Deplacement refusé");
            }
        }