Exemple #1
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);
     }
 }
Exemple #2
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;
                }
            }
        }