static void Main(string[] args) { LinkedList<Client> listeClient = new LinkedList<Client>(); int port = 6666; //on se déclare une oreille TCP sur un port spécifique TcpListener serveur = new TcpListener(System.Net.IPAddress.Any,port); //on la démarre.... serveur.Start(); //tant que le serveur est en vie on tourne en rond while (true) { Console.WriteLine(">> On attend une connexion"); // cette ligne bloque tant que l'oreille n'entends pas une connexion Socket socketClient = serveur.AcceptSocket(); Client client = new Client(socketClient,listeClient); ThreadStart ts = new ThreadStart(client.Thread); Thread trd = new Thread(ts); trd.Start(); } }
//retire un client à la liste de connexion private void RetirerClient(Client client) { // je vérouille la console lock (Console.Out) { Console.WriteLine("# On retire un client"); } //je vérouille la liste avant la supression bool retire = false; lock (listeClient) { retire = listeClient.Remove(client); } lock (Console.Out) { //la variable retire indique si "true/false" l'objet à été retiré de la liste. Console.WriteLine("# Le client à été retiré de la liste :" + retire); Console.WriteLine("# "+listeClient.Count + " Client connecté(s)"); } }
private void DiffuserCommande(Client emetteur, string commande) { Console.WriteLine("On doit diffuser " + commande + "!" + emetteur.nick); lock (listeClient) { // on diffuse pour tous les client.... donc pour tous les clients.... foreach (Client client in listeClient) { //si le client n'est pas celui qui vient d'envoyer if (!client.Equals(emetteur)) { //on diffuse client.Ecrire(commande + "!" + emetteur.nick ); } } } }
//ajoute un client à la liste de connexion private void AjouterClient(Client client) { //important de vérouiller la liste lors de l'ajout pour éviter que 2 threads veuille écrire dans la liste en même temps lock (listeClient) { listeClient.AddLast(client); } //pour éviter que 2 thread essaient d'écrire dans la console en même temps, je vérouille la Console. lock (Console.Out) { Console.WriteLine("# on ajoute un client"); Console.WriteLine("# "+listeClient.Count + " client connecté"); } }