Example #1
0
        /// <summary>
        /// Méthode du processus léger écoutant les connexions des clients. A chaque nouveau client est associé un processus léger ainsi qu'une socket.
        /// </summary>
        private void listenConnect()
        {
            Socket   clientSocket   = null;
            MySocket clientMySocket = null;

            while (true)
            {
                try {
                    clientSocket   = listener.AcceptSocket();
                    clientMySocket = new MySocket(clientSocket);
                    //Un client se connecte, démarrage un processus léger:
                    Thread clientThread = new Thread(receiveClientMsg);
                    clientThread.Start(clientMySocket);

                    //Ajout du client dans la table de hachage:
                    clients.Add(clientMySocket, clientThread);
                    //Création et levée de l'évènement:
                    ServerEventArgs e = new ServerEventArgs(clientMySocket.Id, ServerEventArgs.typeEvent.CONNEXION, null);
                    serverSocketReceiveEvent(this, e);
                }
                catch {
                    break;
                }
            }
        }
Example #2
0
 public bool Send(int id, byte[] msg)
 {
     try {
         foreach (MySocket ms in clients.Keys)
         {
             if (ms.Id == id)
             {
                 ms.Socket.Send(msg, SocketFlags.None);
                 return(true);
             }
         }
         return(false);
     }
     catch {
         ServerEventArgs e = new ServerEventArgs(id, ServerEventArgs.typeEvent.DECONNEXION, null);
         serverSocketReceiveEvent(this, e);
         MySocket.addFreeId(id, getBiggestId());
         return(false);
     }
 }
Example #3
0
        /// <summary>
        /// Méthode du processus léger écoutant les messages des clients. Le processus léger est bloquant sur le receive, et implique que la taille du message soit contenue dans les quatre premiers octets de celui-ci.
        /// Un event est levé à chaque réception de message.
        /// </summary>
        private void receiveClientMsg(Object o)
        {
            MySocket cs = (MySocket)o;

            while (true)
            {
                try {
                    //Les quatre premiers octets contiennent la taille du message:
                    byte[] count = new byte[4];
                    cs.Socket.Receive(count, SocketFlags.None);
                    //La taille du message est maintenant connue:
                    byte[] msg = new byte[BitConverter.ToInt32(count, 0)];
                    cs.Socket.Receive(msg, msg.Length, SocketFlags.None);
                    //Création et levée de l'évènement:
                    ServerEventArgs e = new ServerEventArgs(cs.Id, ServerEventArgs.typeEvent.MESSAGE, msg);
                    serverSocketReceiveEvent(this, e);
                }
                catch {
                    if (cs.Socket != null)
                    {
                        //Erreur durant la réception du message, le client est déconnecté:
                        cs.Socket.Close();
                    }
                    if (serverSocketReceiveEvent != null)
                    {
                        ServerEventArgs e = new ServerEventArgs(cs.Id, ServerEventArgs.typeEvent.DECONNEXION, null);
                        serverSocketReceiveEvent(this, e);
                        MySocket.addFreeId(cs.Id, getBiggestId());
                        Thread thisThread = clients[cs];
                        clients.Remove(cs);
                        thisThread.Abort();
                    }
                    break;
                }
            }
        }
        /// <summary>
        /// Méthode du processus léger écoutant les connexions des clients. A chaque nouveau client est associé un processus léger ainsi qu'une socket.
        /// </summary>
        private void listenConnect()
        {
            Socket clientSocket = null;
            MySocket clientMySocket = null;
            while (true) {
                try {
                    clientSocket = listener.AcceptSocket();
                    clientMySocket = new MySocket(clientSocket);
                    //Un client se connecte, démarrage un processus léger:
                    Thread clientThread = new Thread(receiveClientMsg);
                    clientThread.Start(clientMySocket);

                    //Ajout du client dans la table de hachage:
                    clients.Add(clientMySocket, clientThread);
                    //Création et levée de l'évènement:
                    ServerEventArgs e = new ServerEventArgs(clientMySocket.Id, ServerEventArgs.typeEvent.CONNEXION, null);
                    serverSocketReceiveEvent(this, e);
                }
                catch {
                    break;
                }
            }
        }