/// <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()); } } }
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); }
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é"); } }