Пример #1
0
        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();
            }
        }
Пример #2
0
        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;
            }
        }