Пример #1
0
        // Envoi d'un message au socket donné. Effectuer dans un autre thread
        public static void SendMessage(Socket socket, MessageChat msg)
        {
            BackgroundWorker bwSender = new BackgroundWorker();

            bwSender.DoWork += new DoWorkEventHandler(bworkerSender);
            bwSender.RunWorkerAsync(new object[] { socket, msg });
        }
Пример #2
0
 private static void updateChatRoomList()
 {
     foreach (ConnectedUser user in connectedUserList)
     {
         //envoie de la liste de chatRoom
         ChatLib.MessageChat msgChatRoomList = new ChatLib.MessageChat(MessageType.UpdateChatRoomList, "server", user.name, splitChatRoomList(chatRoomList));
         Console.WriteLine("send updateChatRoom to : " + user.name + " " + user.userSocket.ToString());
         ChatLib.ChatLib.SendMessage(user.userSocket, msgChatRoomList);
     }
 }
Пример #3
0
 private static void updateChatRoomUserList(string chatRoomName)
 {
     foreach (ConnectedUser user in connectedUserList)
     {
         if (user.chatRoomList.Exists(x => x.name == chatRoomName))
         {
             //envoie de la liste de chatRoom
             ChatLib.MessageChat msgChatRoomList = new ChatLib.MessageChat(MessageType.UpdateConnectedUsersInChatRoom, "server", chatRoomName, splitChatRoomUserList(connectedUserList, chatRoomName));
             Console.WriteLine("send updateChatRoomUserList to : " + user.name + " " + user.userSocket.ToString());
             ChatLib.ChatLib.SendMessage(user.userSocket, msgChatRoomList);
             //envoie de la liste des utilisteurs connectés par chatRoom
         }
     }
 }
Пример #4
0
        private static void bworkerSender(object sender, DoWorkEventArgs e)
        {
            object[] obj = e.Argument as object[];

            Socket      socket = obj[0] as Socket;
            MessageChat msg    = obj[1] as MessageChat;

            // Bloque la ressource
            semaphor.WaitOne();

            string json = JsonConvert.SerializeObject(msg);

            try
            {
                socket.Send(GetBytes(json));
            }
            catch (SocketException)
            {
                Console.WriteLine("SocketException dans bworkerSender");
            }

            // Libere la ressource
            semaphor.Release();
        }
Пример #5
0
        private static void launchNewSocketConnection(object obj)
        {
            Socket newSocket = (Socket)obj;
            Thread socketThread;

            object[] objects;
            String   chatRoomName;

            if (newSocket != null)
            {
                while (newSocket.Connected)
                {
                    byte[] MessageReceived = new byte[ChatLib.ChatLib.MESSAGE_MAX_SIZE];

                    try
                    {
                        // On attend de recevoir un msg provenant d'un client
                        int nbBytes = newSocket.Receive(MessageReceived);

                        if (newSocket.Connected)
                        {
                            // On recupere la requete envoye par un client
                            string msgFromClient = ChatLib.ChatLib.GetString(MessageReceived, nbBytes);
                            System.Diagnostics.Debug.WriteLine(msgFromClient);

                            // On caste la requete en message
                            ChatLib.MessageChat msg = ChatLib.ChatLib.createMessageFromString(msgFromClient.Trim());

                            if (msg != null)
                            {
                                Console.WriteLine(msg.MessageType.ToString());

                                // Suivant le type de message
                                switch (msg.MessageType)
                                {
                                case MessageType.None:

                                    break;

                                case MessageType.ClientPrivateMessage:
                                    semaphor.WaitOne();
                                    ConnectedUser target;

                                    target = connectedUserList.Find(x => x.name == msg.TargetName);
                                    semaphor.Release();
                                    Thread.Sleep(100);
                                    ChatLib.ChatLib.SendMessage(target.userSocket, msg);


                                    break;

                                // Message texte
                                case MessageType.ClientChatRoomMessage:
                                    semaphor.WaitOne();
                                    String targetChatRoom = msg.TargetName;

                                    foreach (ConnectedUser user in connectedUserList)
                                    {
                                        if (user.chatRoomList.Exists(x => x.name == targetChatRoom))
                                        {
                                            objects = new object[2] {
                                                user.userSocket, msg
                                            };
                                            semaphor.Release();
                                            socketThread = new Thread(new ParameterizedThreadStart(sendMessage));
                                            socketThread.Start(objects);
                                            semaphor.WaitOne();
                                        }
                                    }
                                    semaphor.Release();
                                    break;

                                // un client se log
                                case MessageType.ConnectToServer:
                                    semaphor.WaitOne();
                                    String userName     = msg.SenderName;
                                    String userPassword = msg.ContentMessage;


                                    ChatLib.MessageChat msgLogIn = new ChatLib.MessageChat(MessageType.ConnectToServer, "server", msg.SenderName, "true");
                                    foreach (User usr in userList)
                                    {
                                        Console.WriteLine("user : "******"pass : "******"user exists name log in : " + userName);
                                        if (userList.Find(x => x.name == userName).password.Equals(userPassword))
                                        {
                                            Console.WriteLine("user exists  pasword  : " + userPassword);


                                            if (connectedUserList.Exists(x => x.name == userName))
                                            {
                                                if (connectedUserList.Find(x => x.name == userName).userSocket.Connected)
                                                {
                                                    connectedUserList.Find(x => x.name == userName).userSocket.Disconnect(true);
                                                }


                                                connectedUserList.Find(x => x.name == userName).userSocket = newSocket;
                                            }
                                            else
                                            {
                                                connectedUserList.Add(new ConnectedUser(userName, new List <ChatRoom>(), newSocket));
                                            }

                                            semaphor.Release();
                                            if (msgLogIn != null)
                                            {
                                                ChatLib.ChatLib.SendMessage(newSocket, msgLogIn);

                                                Thread.Sleep(100);

                                                updateChatRoomList();

                                                Thread.Sleep(100);

                                                updateConnectedUserList();
                                            }
                                        }
                                        else
                                        {
                                            semaphor.Release();
                                            if (msgLogIn != null)
                                            {
                                                msgLogIn.ContentMessage = "false";
                                                ChatLib.ChatLib.SendMessage(newSocket, msgLogIn);
                                            }

                                            newSocket.Disconnect(true);
                                        }
                                    }
                                    else
                                    {
                                        //Sinon on ajoute l'utilisateur à la liste des utilisateurs connectés
                                        connectedUserList.Add(new ConnectedUser(userName, new List <ChatRoom>(), newSocket));
                                        userList.Add(new User(userName, userPassword));
                                        semaphor.Release();
                                        if (msgLogIn != null)
                                        {
                                            ChatLib.ChatLib.SendMessage(newSocket, msgLogIn);

                                            Thread.Sleep(100);

                                            updateChatRoomList();

                                            Thread.Sleep(100);

                                            updateConnectedUserList();
                                        }
                                    }

                                    break;

                                // un client se déconnecte
                                case MessageType.DisconnectFromServer:
                                    semaphor.WaitOne();
                                    ConnectedUser c = connectedUserList.Find(x => x.name == msg.SenderName);
                                    connectedUserList.Remove(connectedUserList.Find(x => x.name == msg.SenderName));
                                    semaphor.Release();
                                    ChatLib.MessageChat msgDisconnectOK = new ChatLib.MessageChat(MessageType.DisconnectFromServer, "server", msg.SenderName, "true");
                                    Thread.Sleep(100);

                                    updateConnectedUserList();

                                    Thread.Sleep(100);

                                    if (msgDisconnectOK != null)
                                    {
                                        ChatLib.ChatLib.SendMessage(newSocket, msgDisconnectOK);
                                    }
                                    Thread.Sleep(100);

                                    foreach (ChatRoom chat in c.chatRoomList)
                                    {
                                        updateChatRoomUserList(chat.name);
                                    }

                                    Thread.Sleep(100);

                                    newSocket.Disconnect(true);

                                    break;

                                //un client rejoint la ChatRoom
                                case MessageType.ChatRoomJoin:
                                    semaphor.WaitOne();
                                    chatRoomName = msg.ContentMessage;

                                    ChatLib.MessageChat msgJoinOK = new ChatLib.MessageChat(MessageType.ChatRoomJoin, msg.SenderName, chatRoomName, "true");

                                    if (connectedUserList.Find(x => x.name == msg.SenderName).chatRoomList.Exists(x => x.name == chatRoomName))
                                    {
                                        msgJoinOK.ContentMessage = "false";
                                    }
                                    else
                                    {
                                        if (!connectedUserList.Find(x => x.name == msg.SenderName).chatRoomList.Exists(x => x.name == chatRoomName))
                                        {
                                            connectedUserList.Find(x => x.name == msg.SenderName).chatRoomList.Add(new ChatRoom(chatRoomName));
                                        }
                                    }

                                    semaphor.Release();

                                    Console.WriteLine(msgJoinOK.ContentMessage);
                                    if (msgJoinOK != null)
                                    {
                                        ChatLib.ChatLib.SendMessage(newSocket, msgJoinOK);

                                        Thread.Sleep(100);
                                        updateChatRoomUserList(chatRoomName);
                                    }

                                    break;

                                //un client quitte la chatRoom
                                case MessageType.ChatRoomExit:
                                    semaphor.WaitOne();
                                    chatRoomName = msg.ContentMessage;

                                    connectedUserList.Find(x => x.name == msg.SenderName).chatRoomList.Remove(connectedUserList.Find(x => x.name == msg.SenderName).chatRoomList.Find(x => x.name == chatRoomName));
                                    Thread.Sleep(100);
                                    semaphor.Release();
                                    updateChatRoomUserList(chatRoomName);

                                    ChatLib.MessageChat msgExitOK = new ChatLib.MessageChat(MessageType.ChatRoomExit, msg.SenderName, chatRoomName, "true");

                                    ChatLib.ChatLib.SendMessage(newSocket, msgExitOK);

                                    break;

                                //supprimer un chatRoom
                                case MessageType.ChatRoomDelete:
                                    semaphor.WaitOne();
                                    chatRoomName = msg.TargetName;
                                    bool exist = false;
                                    foreach (ConnectedUser user in connectedUserList)
                                    {
                                        if (user.chatRoomList.Exists(x => x.name == chatRoomName))
                                        {
                                            semaphor.Release();
                                            //user.chatRoomList.Remove(user.chatRoomList.Find(x => x.name == chatRoomName));
                                            exist = true;
                                            ChatLib.MessageChat msgChatRoomList = new ChatLib.MessageChat(MessageType.UpdateChatRoomList, "server", msg.SenderName, "false");

                                            ChatLib.ChatLib.SendMessage(newSocket, msgChatRoomList);
                                            break;
                                        }
                                    }
                                    if (!exist)
                                    {
                                        semaphor.WaitOne();
                                        chatRoomList.Remove(chatRoomList.Find(x => x.name == chatRoomName));
                                        semaphor.Release();
                                        updateChatRoomList();
                                    }

                                    break;

                                // un client créé un chat room
                                case MessageType.ChatRoomCreate:

                                    chatRoomName = msg.ContentMessage;

                                    ChatLib.MessageChat msgCreateOK = new ChatLib.MessageChat(MessageType.ChatRoomCreate, msg.SenderName, chatRoomName, "true");
                                    semaphor.WaitOne();
                                    if (chatRoomList.Exists(x => x.name == chatRoomName))
                                    {
                                        if (msgCreateOK != null)
                                        {
                                            msgCreateOK.ContentMessage = "false";
                                            semaphor.Release();
                                        }
                                    }
                                    else
                                    {
                                        chatRoomList.Add(new ChatRoom(chatRoomName));
                                        semaphor.Release();
                                    }

                                    updateChatRoomList();

                                    ChatLib.ChatLib.SendMessage(newSocket, msgCreateOK);


                                    break;

                                case MessageType.ClientPrivateImage:
                                    Console.WriteLine("PrivateImage processing");
                                    ConnectedUser targetPrivateImage = connectedUserList.Find(x => x.name == msg.TargetName);
                                    Thread.Sleep(100);
                                    ChatLib.ChatLib.SendMessage(targetPrivateImage.userSocket, msg);
                                    Thread.Sleep(400);
                                    ChatLib.ChatLib.SendMessage(newSocket, msg);
                                    break;

                                case MessageType.PrivateChatCreate:
                                    chatRoomName = msg.TargetName;
                                    ChatLib.MessageChat msgPrivateCreateOK = new ChatLib.MessageChat(MessageType.PrivateChatCreate, msg.TargetName, msg.SenderName, "true");
                                    ChatLib.ChatLib.SendMessage(newSocket, msgPrivateCreateOK);
                                    ConnectedUser targetPrivateChat = connectedUserList.Find(x => x.name == chatRoomName);
                                    Thread.Sleep(100);
                                    ChatLib.ChatLib.SendMessage(targetPrivateChat.userSocket, new MessageChat(MessageType.PrivateChatCreate, msg.SenderName, msg.TargetName, "true"));
                                    break;

                                case MessageType.PrivateChatExit:
                                    chatRoomName = msg.TargetName;

                                    ChatLib.MessageChat msgPrivateExitOK = new ChatLib.MessageChat(MessageType.PrivateChatExit, msg.SenderName, chatRoomName, "true");

                                    ChatLib.ChatLib.SendMessage(newSocket, msgPrivateExitOK);

                                    break;

                                case MessageType.ClientChatRoomImage:
                                    String targetImage = msg.TargetName;

                                    foreach (ConnectedUser user in connectedUserList)
                                    {
                                        if (user.chatRoomList.Exists(x => x.name == targetImage))
                                        {
                                            objects = new object[2] {
                                                user.userSocket, msg
                                            };

                                            socketThread = new Thread(new ParameterizedThreadStart(sendMessage));
                                            socketThread.Start(objects);
                                        }
                                    }
                                    break;
                                }
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                    catch (SocketException e)
                    {
                        Console.WriteLine("erreur socket" + e.ToString());
                    }
                }
            }
        }
Пример #6
0
 private static void updateConnectedUserList()
 {
     foreach (ConnectedUser user in connectedUserList)
     {
         //envoie de la liste de chatRoom
         ChatLib.MessageChat msgChatRoomList = new ChatLib.MessageChat(MessageType.UpdateConnectedUsers, "server", user.name, splitConnectedUserList(connectedUserList));
         Console.WriteLine("send updateConnectedUser to : " + user.name + " " + user.userSocket.ToString());
         ChatLib.ChatLib.SendMessage(user.userSocket, msgChatRoomList);
     }
 }
Пример #7
0
 private static void updateChatRoomUserList(string chatRoomName)
 {
     foreach (ConnectedUser user in connectedUserList)
     {
         if (user.chatRoomList.Exists(x => x.name == chatRoomName))
         {
             //envoie de la liste de chatRoom
             ChatLib.MessageChat msgChatRoomList = new ChatLib.MessageChat(MessageType.UpdateConnectedUsersInChatRoom, "server", chatRoomName, splitChatRoomUserList(connectedUserList, chatRoomName));
             Console.WriteLine("send updateChatRoomUserList to : " + user.name + " " + user.userSocket.ToString());
             ChatLib.ChatLib.SendMessage(user.userSocket, msgChatRoomList);
             //envoie de la liste des utilisteurs connectés par chatRoom
         }
     }
 }
Пример #8
0
        private static void launchNewSocketConnection(object obj)
        {
            Socket newSocket = (Socket)obj;
            Thread socketThread;
            object[] objects;
            String chatRoomName;

            if (newSocket != null)
            {

                while (newSocket.Connected)
                {
                    byte[] MessageReceived = new byte[ChatLib.ChatLib.MESSAGE_MAX_SIZE];

                    try
                    {
                        // On attend de recevoir un msg provenant d'un client
                        int nbBytes = newSocket.Receive(MessageReceived);

                        if (newSocket.Connected)
                        {
                            // On recupere la requete envoye par un client
                            string msgFromClient = ChatLib.ChatLib.GetString(MessageReceived, nbBytes);
                            System.Diagnostics.Debug.WriteLine(msgFromClient);

                            // On caste la requete en message
                            ChatLib.MessageChat msg = ChatLib.ChatLib.createMessageFromString(msgFromClient.Trim());

                            if (msg != null)
                            {

                                Console.WriteLine(msg.MessageType.ToString());

                                // Suivant le type de message
                                switch (msg.MessageType)
                                {
                                    case MessageType.None:

                                        break;

                                    case MessageType.ClientPrivateMessage:
                                        semaphor.WaitOne();
                                        ConnectedUser target;

                                        target = connectedUserList.Find(x => x.name == msg.TargetName);
                                        semaphor.Release();
                                        Thread.Sleep(100);
                                        ChatLib.ChatLib.SendMessage(target.userSocket, msg);

                                        break;

                                    // Message texte
                                    case MessageType.ClientChatRoomMessage:
                                        semaphor.WaitOne();
                                        String targetChatRoom = msg.TargetName;

                                        foreach (ConnectedUser user in connectedUserList)
                                        {
                                            if (user.chatRoomList.Exists(x => x.name == targetChatRoom))
                                            {

                                                objects = new object[2] { user.userSocket, msg };
                                                semaphor.Release();
                                                socketThread = new Thread(new ParameterizedThreadStart(sendMessage));
                                                socketThread.Start(objects);
                                                semaphor.WaitOne();
                                            }
                                        }
                                        semaphor.Release();
                                        break;

                                    // un client se log
                                    case MessageType.ConnectToServer:
                                        semaphor.WaitOne();
                                        String userName = msg.SenderName;
                                        String userPassword = msg.ContentMessage;

                                        ChatLib.MessageChat msgLogIn = new ChatLib.MessageChat(MessageType.ConnectToServer, "server", msg.SenderName, "true");
                                        foreach (User usr in userList)
                                        {
                                            Console.WriteLine("user : "******"pass : "******"user exists name log in : " + userName);
                                            if (userList.Find(x => x.name == userName).password.Equals(userPassword))
                                            {
                                                Console.WriteLine("user exists  pasword  : " + userPassword);

                                                if (connectedUserList.Exists(x => x.name == userName))
                                                {
                                                    if (connectedUserList.Find(x => x.name == userName).userSocket.Connected)
                                                    {
                                                        connectedUserList.Find(x => x.name == userName).userSocket.Disconnect(true);
                                                    }

                                                    connectedUserList.Find(x => x.name == userName).userSocket = newSocket;
                                                }
                                                else
                                                {
                                                    connectedUserList.Add(new ConnectedUser(userName, new List<ChatRoom>(), newSocket));
                                                }

                                                semaphor.Release();
                                                if (msgLogIn != null)
                                                {
                                                    ChatLib.ChatLib.SendMessage(newSocket, msgLogIn);

                                                    Thread.Sleep(100);

                                                    updateChatRoomList();

                                                    Thread.Sleep(100);

                                                    updateConnectedUserList();
                                                }
                                            }
                                            else
                                            {
                                                semaphor.Release();
                                                if (msgLogIn != null)
                                                {
                                                    msgLogIn.ContentMessage = "false";
                                                    ChatLib.ChatLib.SendMessage(newSocket, msgLogIn);
                                                }

                                                newSocket.Disconnect(true);
                                            }
                                        }
                                        else
                                        {
                                            //Sinon on ajoute l'utilisateur à la liste des utilisateurs connectés
                                            connectedUserList.Add(new ConnectedUser(userName, new List<ChatRoom>(), newSocket));
                                            userList.Add(new User(userName, userPassword));
                                            semaphor.Release();
                                            if (msgLogIn != null)
                                            {
                                                ChatLib.ChatLib.SendMessage(newSocket, msgLogIn);

                                                Thread.Sleep(100);

                                                updateChatRoomList();

                                                Thread.Sleep(100);

                                                updateConnectedUserList();
                                            }
                                        }

                                        break;

                                    // un client se déconnecte
                                    case MessageType.DisconnectFromServer:
                                        semaphor.WaitOne();
                                        ConnectedUser c = connectedUserList.Find(x => x.name == msg.SenderName);
                                        connectedUserList.Remove(connectedUserList.Find(x => x.name == msg.SenderName));
                                        semaphor.Release();
                                        ChatLib.MessageChat msgDisconnectOK = new ChatLib.MessageChat(MessageType.DisconnectFromServer, "server", msg.SenderName, "true");
                                        Thread.Sleep(100);

                                        updateConnectedUserList();

                                        Thread.Sleep(100);

                                        if (msgDisconnectOK != null)
                                        {
                                            ChatLib.ChatLib.SendMessage(newSocket, msgDisconnectOK);
                                        }
                                        Thread.Sleep(100);

                                        foreach (ChatRoom chat in c.chatRoomList)
                                        {
                                            updateChatRoomUserList(chat.name);
                                        }

                                        Thread.Sleep(100);

                                        newSocket.Disconnect(true);

                                        break;

                                    //un client rejoint la ChatRoom
                                    case MessageType.ChatRoomJoin:
                                        semaphor.WaitOne();
                                        chatRoomName = msg.ContentMessage;

                                        ChatLib.MessageChat msgJoinOK = new ChatLib.MessageChat(MessageType.ChatRoomJoin, msg.SenderName, chatRoomName, "true");

                                        if (connectedUserList.Find(x => x.name == msg.SenderName).chatRoomList.Exists(x => x.name == chatRoomName))
                                            msgJoinOK.ContentMessage = "false";
                                        else
                                        {
                                            if (!connectedUserList.Find(x => x.name == msg.SenderName).chatRoomList.Exists(x => x.name == chatRoomName))
                                            {
                                                connectedUserList.Find(x => x.name == msg.SenderName).chatRoomList.Add(new ChatRoom(chatRoomName));

                                            }
                                        }

                                        semaphor.Release();

                                        Console.WriteLine(msgJoinOK.ContentMessage);
                                        if (msgJoinOK != null)
                                        {
                                            ChatLib.ChatLib.SendMessage(newSocket, msgJoinOK);

                                            Thread.Sleep(100);
                                            updateChatRoomUserList(chatRoomName);
                                        }

                                        break;

                                    //un client quitte la chatRoom
                                    case MessageType.ChatRoomExit:
                                        semaphor.WaitOne();
                                        chatRoomName = msg.ContentMessage;

                                        connectedUserList.Find(x => x.name == msg.SenderName).chatRoomList.Remove(connectedUserList.Find(x => x.name == msg.SenderName).chatRoomList.Find(x => x.name == chatRoomName));
                                        Thread.Sleep(100);
                                        semaphor.Release();
                                        updateChatRoomUserList(chatRoomName);

                                        ChatLib.MessageChat msgExitOK = new ChatLib.MessageChat(MessageType.ChatRoomExit, msg.SenderName, chatRoomName, "true");

                                        ChatLib.ChatLib.SendMessage(newSocket, msgExitOK);

                                        break;

                                    //supprimer un chatRoom
                                    case MessageType.ChatRoomDelete:
                                        semaphor.WaitOne();
                                        chatRoomName = msg.TargetName;
                                        bool exist = false;
                                        foreach (ConnectedUser user in connectedUserList)
                                        {
                                            if (user.chatRoomList.Exists(x => x.name == chatRoomName))
                                            {
                                                semaphor.Release();
                                                //user.chatRoomList.Remove(user.chatRoomList.Find(x => x.name == chatRoomName));
                                                exist = true;
                                                ChatLib.MessageChat msgChatRoomList = new ChatLib.MessageChat(MessageType.UpdateChatRoomList, "server", msg.SenderName, "false");

                                                ChatLib.ChatLib.SendMessage(newSocket, msgChatRoomList);
                                                break;
                                            }
                                        }
                                        if (!exist)
                                        {
                                            semaphor.WaitOne();
                                            chatRoomList.Remove(chatRoomList.Find(x => x.name == chatRoomName));
                                            semaphor.Release();
                                            updateChatRoomList();
                                        }

                                        break;

                                    // un client créé un chat room
                                    case MessageType.ChatRoomCreate:

                                        chatRoomName = msg.ContentMessage;

                                        ChatLib.MessageChat msgCreateOK = new ChatLib.MessageChat(MessageType.ChatRoomCreate, msg.SenderName, chatRoomName, "true");
                                        semaphor.WaitOne();
                                        if (chatRoomList.Exists(x => x.name == chatRoomName))
                                        {
                                            if (msgCreateOK != null)
                                            {
                                                msgCreateOK.ContentMessage = "false";
                                                semaphor.Release();
                                            }
                                        }
                                        else
                                        {

                                            chatRoomList.Add(new ChatRoom(chatRoomName));
                                            semaphor.Release();

                                        }

                                        updateChatRoomList();

                                        ChatLib.ChatLib.SendMessage(newSocket, msgCreateOK);

                                        break;

                                    case MessageType.ClientPrivateImage:
                                        Console.WriteLine("PrivateImage processing");
                                        ConnectedUser targetPrivateImage = connectedUserList.Find(x => x.name == msg.TargetName);
                                        Thread.Sleep(100);
                                        ChatLib.ChatLib.SendMessage(targetPrivateImage.userSocket, msg);
                                        Thread.Sleep(400);
                                        ChatLib.ChatLib.SendMessage(newSocket, msg);
                                        break;
                                    case MessageType.PrivateChatCreate:
                                        chatRoomName = msg.TargetName;
                                        ChatLib.MessageChat msgPrivateCreateOK = new ChatLib.MessageChat(MessageType.PrivateChatCreate, msg.TargetName, msg.SenderName, "true");
                                        ChatLib.ChatLib.SendMessage(newSocket, msgPrivateCreateOK);
                                        ConnectedUser targetPrivateChat = connectedUserList.Find(x => x.name == chatRoomName);
                                        Thread.Sleep(100);
                                        ChatLib.ChatLib.SendMessage(targetPrivateChat.userSocket,new MessageChat(MessageType.PrivateChatCreate,msg.SenderName,msg.TargetName,"true"));
                                        break;
                                    case MessageType.PrivateChatExit:
                                        chatRoomName = msg.TargetName;

                                        ChatLib.MessageChat msgPrivateExitOK = new ChatLib.MessageChat(MessageType.PrivateChatExit, msg.SenderName, chatRoomName, "true");

                                        ChatLib.ChatLib.SendMessage(newSocket, msgPrivateExitOK);

                                        break;

                                    case MessageType.ClientChatRoomImage:
                                        String targetImage = msg.TargetName;

                                        foreach (ConnectedUser user in connectedUserList)
                                        {
                                            if (user.chatRoomList.Exists(x => x.name == targetImage))
                                            {

                                                objects = new object[2] { user.userSocket, msg };

                                                socketThread = new Thread(new ParameterizedThreadStart(sendMessage));
                                                socketThread.Start(objects);
                                            }
                                        }
                                        break;
                                }
                            }
                        }
                        else break;
                    }
                    catch (SocketException e)
                    {
                        Console.WriteLine("erreur socket" + e.ToString());
                    }
                }
            }
        }
Пример #9
0
 // Envoi d'un message au socket donné. Effectuer dans un autre thread
 public static void SendMessage(Socket socket, MessageChat msg)
 {
     BackgroundWorker bwSender = new BackgroundWorker();
     bwSender.DoWork += new DoWorkEventHandler(bworkerSender);
     bwSender.RunWorkerAsync(new object[] { socket, msg });
 }
Пример #10
0
        // Deserialization d'un message au format JSON
        public static MessageChat createMessageFromString(string str)
        {
            MessageChat msg = JsonConvert.DeserializeObject <MessageChat>(str);

            return(msg);
        }