private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { // On coupe toutes les connexions et on ferme toutes les Chat Rooms ouvertes foreach (FormChatRoom chatRoom in this.listFormChatRoom) { chatRoom.Close(); } foreach (FormChatPrivate privateChatRoom in this.listFormChatPrivate) { privateChatRoom.Close(); } listFormChatRoom.Clear(); listFormChatPrivate.Clear(); this.treeViewChatRooms.Nodes[0].Nodes.Clear(); this.treeViewClients.Nodes[0].Nodes.Clear(); if (client != null) { // On previent le serveur de notre déconnexion ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.DisconnectFromServer, client.UserName, "", ""); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); } }
/******************/ /***** MENU STRIP *****/ private void quitToolStripMenuItem_Click(object sender, EventArgs e) // Lorsque que l'on clique sur quitter { // On coupe toutes les connexions foreach (FormChatRoom chatRoom in this.listFormChatRoom) { chatRoom.Close(); } foreach (FormChatPrivate privateChatRoom in this.listFormChatPrivate) { privateChatRoom.Close(); } listFormChatRoom.Clear(); listFormChatPrivate.Clear(); this.treeViewChatRooms.Nodes[0].Nodes.Clear(); this.treeViewClients.Nodes[0].Nodes.Clear(); if (client != null) { ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.DisconnectFromServer, client.UserName, null, null); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); } System.Environment.Exit(0); }
private void textBoxMessage_DragDrop(object sender, DragEventArgs e) { string[] filePaths = (string[])(e.Data.GetData(DataFormats.FileDrop)); foreach (string fileLoc in filePaths) { Image im = Image.FromFile(System.IO.Path.GetFullPath(fileLoc)); FileInfo fil = new FileInfo(fileLoc); if (fil.Length > 100000) { MessageBox.Show("Le fichier exède 100ko"); return; } // im = resizeImage(im); ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.ClientPrivateImage, client.UserName, this.PrivateChatName, im, null); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); this.writeUsername(msg.SenderName); this.drawImage(msg.ContentMessage); closingWindow = true; } }
private void treeViewClients_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)// Lorsque l'on double clique sur un utilisateur, on lance une Chat Room privée { TreeNode treeNode = (TreeNode)e.Node; ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.PrivateChatCreate, client.UserName, treeNode.Text, ""); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); }
public void OnReceivedMessage(ChatLib.MessageChat message) { // Suivant le type de message switch (message.MessageType) { case ChatLib.MessageType.None: break; case ChatLib.MessageType.ClientPrivateMessage: if (message.SenderName == PrivateChatName) { this.writeUsername(message.SenderName); this.writeMessage(message.ContentMessage); } break; case ChatLib.MessageType.ClientPrivateImage: try { if (message.SenderName == PrivateChatName) { this.writeUsername(message.SenderName); this.drawImage(message.ContentMessage); } } catch (JsonReaderException) { MessageBox.Show("La taille de l'image excède 100ko"); } break; } }
private void FormChatRoom_FormClosing(object sender, FormClosingEventArgs e) { ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.ChatRoomExit, client.UserName, this.chatRoomName, this.chatRoomName); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); closingWindow = true; }
private void FormChatPrivate_FormClosing(object sender, FormClosingEventArgs e) { ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.PrivateChatExit, client.UserName, this.colleagueName, null); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); closingWindow = true; }
private void buttonSend_Click(object sender, EventArgs e) { string msgToSend = this.textBoxMessage.Text; ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.ClientChatRoomMessage, client.UserName, this.chatRoomName, msgToSend); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); this.textBoxMessage.Text = ""; }
/******************/ /***** TREE VIEW *****/ private void treeViewChatRooms_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)// Lorsque l'on double clique sur une Chat Room, on s'y connecte { TreeNode treeNode = (TreeNode)e.Node; // Si c'est un chat room if (treeNode.Level == 1) { ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.ChatRoomJoin, client.UserName, null, treeNode.Text); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); } }
// Lancer dans un thread private void connectToServer() { Client newClient = null; Socket socketConnection = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { socketConnection.Connect(IPAddress.Parse(FormMain.ipAddressServer), FormMain.port); // If Connection Successful if (socketConnection.Connected) { socketConnection.Receive(new byte[1]); newClient = new Client(new IPEndPoint(IPAddress.Parse(FormMain.ipAddressServer), FormMain.port), this.textBoxUsername.Text, this.textBoxPassword.Text); newClient.ClientSocket = socketConnection; FormMain.client = newClient; ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.ConnectToServer, newClient.UserName, null, newClient.Password); ChatLib.ChatLib.SendMessage(newClient.ClientSocket, msg); } if (cancel) { return; } this.Invoke((MethodInvoker) delegate { buttonOK.Enabled = true; textBoxPassword.Enabled = true; textBoxUsername.Enabled = true; this.OnCreateConnectingClient(newClient); this.Close(); }); } catch (Exception ex) { if (cancel) { return; } this.Invoke((MethodInvoker) delegate { MessageBox.Show(ex.Message); }); } }
private void buttonPrivateChat_Click(object sender, EventArgs e) { if (this.listClient.SelectedItems.Count > 0) { ListViewItem item = this.listClient.SelectedItems[0]; string clientPrivateName = item.Text; ChatLib.MessageChat message = new ChatLib.MessageChat(ChatLib.MessageType.PrivateChatCreate, this.client.UserName, clientPrivateName, null); ChatLib.ChatLib.SendMessage(client.ClientSocket, message); } }
public void OnReceivedMessage(ChatLib.MessageChat message) { // Suivant le type de message switch (message.MessageType) { case ChatLib.MessageType.None: break; // Message texte chat room case ChatLib.MessageType.ClientChatRoomMessage: if (message.TargetName == chatRoomName) { this.writeUsername(message.SenderName); this.writeMessage(message.ContentMessage); } break; case ChatLib.MessageType.UpdateConnectedUsersInChatRoom: if (message.TargetName == chatRoomName) { this.listClient.Items.Clear(); string[] listClient = message.ContentMessage.Split('\\'); foreach (string s in listClient) { ListViewItem item = new ListViewItem(s); this.listClient.Items.Add(item); } } break; case ChatLib.MessageType.ClientPrivateMessage: break; case ChatLib.MessageType.ClientChatRoomImage: if (message.TargetName == chatRoomName) { this.writeUsername(message.SenderName); this.drawImage(message.ContentMessage); } break; } }
private void connectToolStripMenuItem_Click(object sender, EventArgs e)// Lorsque l'on clique sur Connect { if (!Connected) { if (FormMain.ipAddressServer != null || FormMain.port != -1) { finish = false; FormConnection formConnection = new FormConnection(); formConnection.OnCreateConnectingClient += formConnection_OnCreateConnectingClient; formConnection.ShowDialog(); } else { MessageBox.Show("Please first configure the server.\nGo to Menu > Parameters > Server IP Address."); } } else { // On coupe toutes les connexions foreach (FormChatRoom chatRoom in this.listFormChatRoom) { chatRoom.Close(); } foreach (FormChatPrivate privateChatRoom in this.listFormChatPrivate) { privateChatRoom.Close(); } listFormChatRoom.Clear(); listFormChatPrivate.Clear(); this.treeViewChatRooms.Nodes[0].Nodes.Clear(); this.treeViewClients.Nodes[0].Nodes.Clear(); ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.DisconnectFromServer, client.UserName, null, null); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); } menuStrip_Update(); }
public void UpdateConnectedUsersInChatRoom(ChatLib.MessageChat message) { if (message.TargetName == chatRoomName) { string[] listClient = message.ContentMessage.Split('\\'); this.listClient.Items.Clear(); foreach (string s in listClient) { //if (s.Length > 0 && client.UserName != s) //{ // if (this.listClient.FindItemWithText(s) == null) // { // ListViewItem item = new ListViewItem(s); // this.listClient.Items.Add(item); // } //} if (s.Length > 0 && client.UserName != s) { ListViewItem item = new ListViewItem(s); this.listClient.Items.Add(item); } } } }
//private void receiveMessage(object obj) //{ // string chatRoomName = (string)obj; // byte[] buffer = new byte[ChatLib.ChatLib.MESSAGE_MAX_SIZE]; // while (true) // { // System.Diagnostics.Debug.WriteLine("FormNewRoom Waiting"); // int nbBytes = client.ClientSocket.Receive(buffer); // System.Diagnostics.Debug.WriteLine("FormNewRoom received"); // if (nbBytes > 0) // { // try // { // ChatLib.MessageChat msg = ChatLib.ChatLib.createMessageFromString(ChatLib.ChatLib.GetString(buffer, nbBytes)); // if (msg.MessageType == ChatLib.MessageType.ChatRoomCreate) // { // if (msg.ContentMessage == "true") // { // this.Invoke((MethodInvoker)delegate // { // this.OnCreateNewChatRoom(chatRoomName); // this.Close(); // }); // } // break; // } // } // catch (JsonReaderException) // { // } // } // } //} private void buttonCreateChatRoom_Click(object sender, EventArgs e) { string chatRoomName = this.textBoxChatRoomName.Text.Trim(); if (chatRoomName.Length > 0) { //t.Start(chatRoomName); ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.ChatRoomCreate, client.UserName, null, chatRoomName); if (msg != null) { System.Diagnostics.Debug.WriteLine("Sending : " + msg.ToString()); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); //this.OnCreateNewChatRoom(chatRoomName); this.Close(); } } else { MessageBox.Show("Chat Room name is missing..."); } }
private void deleteToolStripMenuItem_Click(object sender, EventArgs e) // Lorsque l'on clique droit sur une Chat Room puis Delete { ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.ChatRoomDelete, client.UserName, rightClicked, null); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); }
private void textBoxMessage_DragDrop(object sender, DragEventArgs e) { string[] filePaths = (string[])(e.Data.GetData(DataFormats.FileDrop)); foreach (string fileLoc in filePaths) { Image im = Image.FromFile(System.IO.Path.GetFullPath(fileLoc)); FileInfo fil = new FileInfo(fileLoc); if (fil.Length > 100000) { MessageBox.Show("Le fichier exède 100ko"); return; } // im = resizeImage(im); ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.ClientChatRoomImage,client.UserName, this.chatRoomName, im,null); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); closingWindow = true; } }
// Lorsque l'on double clique sur une Chat Room, on s'y connecte /******************/ /***** TREE VIEW *****/ private void treeViewChatRooms_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { TreeNode treeNode = (TreeNode)e.Node; // Si c'est un chat room if (treeNode.Level == 1) { ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.ChatRoomJoin, client.UserName, null, treeNode.Text); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); } }
// Lorsque l'on clique sur Connect private void connectToolStripMenuItem_Click(object sender, EventArgs e) { if (!Connected) { if (FormMain.ipAddressServer != null || FormMain.port != -1) { finish = false; FormConnection formConnection = new FormConnection(); formConnection.OnCreateConnectingClient += formConnection_OnCreateConnectingClient; formConnection.ShowDialog(); } else { MessageBox.Show("Please first configure the server.\nGo to Menu > Parameters > Server IP Address."); } } else { // On coupe toutes les connexions foreach (FormChatRoom chatRoom in this.listFormChatRoom) { chatRoom.Close(); } foreach (FormChatPrivate privateChatRoom in this.listFormChatPrivate) { privateChatRoom.Close(); } listFormChatRoom.Clear(); listFormChatPrivate.Clear(); this.treeViewChatRooms.Nodes[0].Nodes.Clear(); this.treeViewClients.Nodes[0].Nodes.Clear(); ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.DisconnectFromServer, client.UserName, null, null); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); } menuStrip_Update(); }
// Lorsque l'on clique droit sur une Chat Room puis Delete private void deleteToolStripMenuItem_Click(object sender, EventArgs e) { ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.ChatRoomDelete, client.UserName, rightClicked, null); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); }
public void receiveMessageFromServer() { // Boucle de réception des messages du serveur byte[] buf = new byte[ChatLib.ChatLib.MESSAGE_MAX_SIZE]; ChatLib.MessageChat msg = null; while (true) { if (!finish) { try { int nbBytes = client.ClientSocket.Receive(buf); if (nbBytes > 0) { if (client.Connected && client.ClientSocket.Connected) { System.Diagnostics.Debug.WriteLine("FormMain received"); try { msg = ChatLib.ChatLib.createMessageFromString(ChatLib.ChatLib.GetString(buf, nbBytes)); System.Diagnostics.Debug.WriteLine(msg.MessageType); switch (msg.MessageType) // En fonction du type de message recu { case ChatLib.MessageType.ChatRoomExit: // Le serveur nous confirme que nous quittons la Chat Room if (msg.ContentMessage == "true") { this.Invoke((MethodInvoker) delegate { listFormChatRoom.Remove(listFormChatRoom.Find(x => x.ChatRoomName == msg.TargetName)); }); } break; case ChatLib.MessageType.PrivateChatExit: // Le serveur nous confirme que nous quittons la Chat Room privée if (msg.ContentMessage == "true") { this.Invoke((MethodInvoker) delegate { listFormChatPrivate.Remove(listFormChatPrivate.Find(x => x.PrivateChatName == msg.TargetName)); }); } break; case ChatLib.MessageType.ChatRoomJoin: // Le serveur nous confirme que nous nous connectons à une Chat Room if (msg.ContentMessage == "true") { this.Invoke((MethodInvoker) delegate { if (!listFormChatRoom.Exists(x => x.ChatRoomName == msg.TargetName)) { listFormChatRoom.Add(new FormChatRoom(msg.TargetName)); } listFormChatRoom.Find(x => x.ChatRoomName == msg.TargetName).Show(); }); } break; case ChatLib.MessageType.ChatRoomCreate: // Le serveur nous confirme que nous avons créé une Chat Room if (msg.ContentMessage == "true") { this.Invoke((MethodInvoker) delegate { if (!this.listFormChatRoom.Exists(x => x.ChatRoomName == msg.TargetName)) { this.formNewRoom_OnCreateNewChatRoom(msg.TargetName); } }); } break; case ChatLib.MessageType.ClientChatRoomMessage: // A la reception d'un message // Verifier parmis toutes les Chat Rooms ouvertes dans lesquels le client est connecté // Transférer le message à cette chat room if (listFormChatRoom.Exists(x => x.ChatRoomName == msg.TargetName)) { this.Invoke((MethodInvoker) delegate { FormChatRoom chat = listFormChatRoom.Find(x => x.ChatRoomName == msg.TargetName); chat.OnReceivedMessage(msg); }); } break; case ChatLib.MessageType.ClientChatRoomImage: // A la reception d'un message de type image if (listFormChatRoom.Exists(x => x.ChatRoomName == msg.TargetName)) { this.Invoke((MethodInvoker) delegate { FormChatRoom chat = listFormChatRoom.Find(x => x.ChatRoomName == msg.TargetName); chat.OnReceivedMessage(msg); }); } break; case ChatLib.MessageType.UpdateConnectedUsersInChatRoom: // Le serveur nous informe que la liste des utilisateurs connectés à une Chat Room précise a été mise à jour if (listFormChatRoom.Exists(x => x.ChatRoomName == msg.TargetName)) { this.Invoke((MethodInvoker) delegate { FormChatRoom chat = listFormChatRoom.Find(x => x.ChatRoomName == msg.TargetName); chat.UpdateConnectedUsersInChatRoom(msg); }); } break; case ChatLib.MessageType.UpdateChatRoomList: // Le serveur nous indique que la liste des Chat Rooms a été mise à jour if (msg.ContentMessage != "false") { this.Invoke((MethodInvoker) delegate { this.treeViewChatRooms.Nodes[0].Nodes.Clear(); // On vide la liste des Chat Rooms }); foreach (string chatRoom in msg.ContentMessage.Split('\\')) { // On réaffiche la liste des Chat Rooms if (chatRoom.Length > 0) { this.Invoke((MethodInvoker) delegate { this.formNewRoom_OnCreateNewChatRoom(chatRoom); }); } } } if (msg.ContentMessage == "false") { MessageBox.Show("You can't delete this Chat Room while users are still in it."); } break; case ChatLib.MessageType.PrivateChatCreate: // Le serveur nous confirme la création d'une Chat Room privée FormChatPrivate privchat = new FormChatPrivate(msg.SenderName); if (!this.listFormChatPrivate.Exists(x => x.PrivateChatName == msg.SenderName)) { this.Invoke((MethodInvoker) delegate { this.listFormChatPrivate.Add(privchat); this.listFormChatPrivate.Find(x => x.PrivateChatName == privchat.PrivateChatName).Show(); }); } break; case ChatLib.MessageType.ClientPrivateMessage: // A la réception d'un message privé if (listFormChatPrivate.Exists(x => x.PrivateChatName == msg.SenderName)) { this.Invoke((MethodInvoker) delegate { FormChatPrivate chat = listFormChatPrivate.Find(x => x.PrivateChatName == msg.SenderName); chat.OnReceivedMessage(msg); }); } break; case ChatLib.MessageType.ClientPrivateImage: // A la réception d'un message privé de type image if (listFormChatPrivate.Exists(x => x.PrivateChatName == msg.SenderName)) { this.Invoke((MethodInvoker) delegate { FormChatPrivate chat = listFormChatPrivate.Find(x => x.PrivateChatName == msg.SenderName); chat.OnReceivedMessage(msg); }); } break; case ChatLib.MessageType.UpdateConnectedUsers: // Le serveur nous indique que la liste des utlisateurs connectés a été mise à jour string[] users = msg.ContentMessage.Split('\\'); this.Invoke((MethodInvoker) delegate { this.treeViewClients.Nodes[0].Nodes.Clear(); // On vide la liste des utilisateurs connectés foreach (string s in users) { System.Diagnostics.Debug.WriteLine(s); if (s.Length > 0 && s != client.UserName) { this.treeViewClients.Nodes[0].Nodes.Add(new TreeNode(s)); } } this.treeViewClients.ExpandAll(); }); break; case ChatLib.MessageType.DisconnectFromServer: // Le serveur nous confirme notre déconnexion if (msg.ContentMessage == "true") { FormMain.client = null; finish = true; if (!this.IsDisposed) { this.Invoke((MethodInvoker) delegate { this.Text = "Chat Application"; this.menuStrip_Update(); }); } return; } break; } } catch (JsonReaderException) { } } else { return; } } } catch (SocketException) { } } else { return; } } }
// Lorsque que l'on clique sur quitter /******************/ /***** MENU STRIP *****/ private void quitToolStripMenuItem_Click(object sender, EventArgs e) { // On coupe toutes les connexions foreach (FormChatRoom chatRoom in this.listFormChatRoom) { chatRoom.Close(); } foreach (FormChatPrivate privateChatRoom in this.listFormChatPrivate) { privateChatRoom.Close(); } listFormChatRoom.Clear(); listFormChatPrivate.Clear(); this.treeViewChatRooms.Nodes[0].Nodes.Clear(); this.treeViewClients.Nodes[0].Nodes.Clear(); if (client != null) { ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.DisconnectFromServer, client.UserName, null, null); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); } System.Environment.Exit(0); }
// Lorsque l'on double clique sur un utilisateur, on lance une Chat Room privée private void treeViewClients_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { TreeNode treeNode = (TreeNode)e.Node; ChatLib.MessageChat msg = new ChatLib.MessageChat(ChatLib.MessageType.PrivateChatCreate, client.UserName, treeNode.Text,""); ChatLib.ChatLib.SendMessage(client.ClientSocket, msg); }