private void btnSend_Click(object sender, EventArgs e) { if (txbContent.Text == "") { return; } ChatContent temp = new ChatContent(); temp.Content = txbContent.Text; ServerSite.TheServer.Instance.SendChatContent(temp); AddContentToRtbx(temp); txbContent.Clear(); }
private void AddContentToRtbx(ChatContent data) { string s = ""; if (data.Sender == "") { s += "Server to all: " + data.Content; } else { s += data.Sender + " to Server: " + data.Content; } rtxbAllContent.Text += s + System.Environment.NewLine; }
/// <summary> /// Wartet fortlaufend auf Packete vom Client /// </summary> public void Receiver() { try { while (client.Client.Connected) { GeneralPackage receivedPackage = (GeneralPackage)bFormatter.Deserialize(netStream); GeneralPackage sendPackage = new GeneralPackage(); switch (receivedPackage.Header) { case ComHeader.hSend: MessageSend message = new MessageSend(); message = (MessageSend)receivedPackage.Content; int indexReceiver = UserController.GetIndexOfUser(message.To); //Ist der Empfänger Online ? if (UserController.ConnectedUsers[indexReceiver].Status == true) { NetworkStream netStreamOfReceiver = ((SClient)UserController.ConnectedUsers[indexReceiver].Connection).netStream; // An den Empfänger senden sendPackage.Header = ComHeader.hReceived; //Sende Nachricht zum Empfänger MessageReceived messageReceived = new MessageReceived(); messageReceived.From = individualUser.Email; messageReceived.Message = message.Msg; sendPackage.Content = messageReceived; bFormatter.Serialize(netStreamOfReceiver, sendPackage); //Speichere Nachricht in der Datenbank dbController.SaveMessage(individualUser.Email, message.To, message.Msg, false); } else { //Speichere die Nachricht in der Datenbank dbController.SaveMessage(individualUser.Email, message.To, message.Msg, false); } break; case ComHeader.hDisconnect: if (individualUser != null) //individualUser ist null, wenn der Benutzer sich nur registrieren möchte { Console.WriteLine("[{0}] Client ({1}) hat sich abgemeldet", DateTime.Now, individualUser.Email); CloseConn(); } else { Console.WriteLine("[{0}] Client hat sich abgemeldet", DateTime.Now); CloseConn(); } break; case ComHeader.hChat: // Wenn nach dem Inhalt eines "Chats" gefragt wird sendPackage.Header = ComHeader.hChat; ChatPerson chatPerson = ((ChatPerson)receivedPackage.Content); //Die ungelesenen Nachrichten als gelesen markieren dbController.MarkNotReceivedMessagesAsReceived(individualUser.Email, chatPerson.Email); ChatContent chatContent = new ChatContent(); chatContent.chatContent = dbController.LoadChat(individualUser.Email, chatPerson.Email); sendPackage.Content = chatContent; SendPackage(sendPackage); break; case ComHeader.hAddContact: #region Kontakt hinzufügen ChatPerson friend = ((ChatPerson)receivedPackage.Content); // Wenn der Kontakt hinzugefügt wurden konnte if (dbController.AddContact(individualUser.Email, friend.Email)) { sendPackage.Header = ComHeader.hAddContact; sendPackage.Content = dbController.LoadContacts(individualUser.Email); SendPackage(sendPackage); } else { // Wenn der Kontakt nicht hinzugeüft werden kann sendPackage.Header = ComHeader.hAddContactWrong; SendPackage(sendPackage); } #endregion break; case ComHeader.hState: sendPackage.Header = ComHeader.hState; sendPackage.Content = dbController.LoadContacts(individualUser.Email); SendPackage(sendPackage); break; case ComHeader.hMessagesRead: ChatPerson chat_friend = ((ChatPerson)receivedPackage.Content); //Die Nachrichten als gelesen markieren dbController.MarkNotReceivedMessagesAsReceived(individualUser.Email, chat_friend.Email); break; } } } catch (IOException e) { //Falls während eines Vorgangs ein Fehler auftreten sollte, wird von einer Verbindungsunterbrechung ausgegangen. Console.WriteLine("[{0}] Client ({1}) hat sich abgemeldet", DateTime.Now, individualUser.Email); Console.WriteLine("{0}", e.ToString()); //TODO: /* * Wenn ein "Client" sicht abmeldet, erscheint eine Fehlermeldung("[...] connection was forcibly closed"). * Besser wäre eine Abmeldung mit einer Benachrichtigung an den Server */ } }