public void receive() { try { while (true) { serverMessage = Message.Deserialize(sock); if (id == -1) //Le serveur n'a pas encore attribué d'ID au client { if (serverMessage.Content[0].Equals("false")) //Mauvais identifiants { f2.errorMessage(); } else //Le client a été connecté, il reçoit la liste des rooms et son id { //Passage de f2 à f formEvent += new FormHandler(f2.NextForm); raiseFormEvent(); id = serverMessage.Sender; //Initie l'id du client f.setRoomList(serverMessage.Content); //On liste les rooms disponibles } } else if (serverMessage.Sender == 0) { if (serverMessage.Content.Count == 1) //Content 0 : Message serveur { serverMessage.Content[0] = "[SERVER] " + serverMessage.Content[0]; //Message du server raiseReceivedEvent(); //Permet d'afficher un message dans la form } else if (serverMessage.Content[1].Equals("add")) //Content 0 : nom room - Content 1 : add { f.addRoomToList(serverMessage.Content[0]); //Rajout de la nouvelle room à la liste des rooms } else if (serverMessage.Content[1].Equals("remove")) //Content 0 : nom room - Content 1 : remove { f.deleteRoomFromList(serverMessage.Content[0]); //Suppression d'une room vide de la ListBox } } else { serverMessage.Content[0] = "[" + serverMessage.Sender + "] " + serverMessage.Content[0]; raiseReceivedEvent(); } } } catch (Exception) { MessageBox.Show("Disconnected from server"); } finally { Application.Exit(); } }
public void receive() { try { Message message; while (true) { message = Message.Deserialize(s); message.Sender = this.id; //On sécurise l'ID de l'émetteur, pas d'usurpation d'ID possible if (message.Room == null && message.Content[0] == "signup") //Register a new user { bool status = Auth.register(message.Content[1], message.Content[2]); if (status) { userName = message.Content[1]; init(); Console.WriteLine(userName + " signed up."); } else { send(new Message(new List <string>() { "false" }, "Welcome_room", id)); } } else if (message.Room == null && message.Content[0] == "signin") //Login an existing user { bool status = Auth.login(message.Content[1], message.Content[2]); if (status) { userName = message.Content[1]; init(); Console.WriteLine(message.Content[1] + " signed in."); } else { send(new Message(new List <string>() { "false" }, "Welcome_room", id)); } } else if (message.Room == null) //Message a destination du serveur : creation/subscribe a une room { bool trouve = false; for (int i = 0; i < Room.rooms.Count; i++) //On cherche si la room existe dans la liste de rooms (via son nom) { if (Room.rooms[i].name == message.Content[0]) //Si on trouve la room on subscribe la session sur cette room { linkToRoom(Room.rooms[i]); //fait l'association de listes entre la room et la session trouve = true; } } if (trouve == false) //Creation de la room { new Room(message.Content[0], this); //On envoie la nouvelle liste de room aux clients Message msg = new Message(new List <string>() { message.Content[0], "add" }, null, 0); //Message d'upload des rooms Server.queue.Enqueue(msg); //mis en queue pour broadcast } } else //Message classique dans une Room { Console.WriteLine("[Client " + userName + " says] " + message.Content[0] + " To " + message.Room); Server.queue.Enqueue(message); //Ajout du message entrant a la liste, il sera transmis a la room par un thread serveur } } } catch (Exception) { Console.WriteLine("[Client " + userName + " disconnected]"); disconnect(); } finally { sessions.Remove(this); removeAllRooms(); //Supprime les rooms qui deviennent vides Server.counter -= 1; } }