/// <summary> /// Fügt einen Host zur Liste hinzu, wenn er noch nicht /// vorhanden ist /// </summary> /// <param name="endPoint">IPEndPoint des Hosts</param> /// <param name="message">Nachricht (enthält Portnummer)</param> private void AddClient(EndPoint endPoint, string message) { ChatMessage msg = new ChatMessage(message, ""); bool found = false; // Host in der Liste suchen foreach (ChatConnection connection in clientList) { if (connection.Address.Equals(((IPEndPoint)endPoint).Address) && connection.PortNumber == int.Parse(msg.PortNumber)) { found = true; break; } } // Wenn nicht gefunden, hinzufügen if (!found) { ChatConnection conn = new ChatConnection { Address = ((IPEndPoint)endPoint).Address, PortNumber = int.Parse(msg.PortNumber) }; clientList.Add(conn); } }
/// <summary> /// Konstruktor /// </summary> /// <param name="connection">Verbindungseinstellungen für das Ziel der Übertragung</param> public ChatClient(ChatConnection connection) { // Verbindungsdaten speichern this.connection = connection; // TcpClient-Objekt erzeugen tcpClient = new TcpClient(); }
/// <summary> /// Eventhandler für Klick auf den "OK"-Button /// </summary> private void OkButton_Click(object sender, RoutedEventArgs e) { // Server-Daten parsen und ggf. Default setzen ChatConnection tempServerConnection = Parse(ServerHostTextBox, ServerPortTextBox); // Server-Daten parsen und ggf. Default setzen ChatConnection tempClientConnection = Parse(ClientHostTextBox, ClientPortTextBox); // Eingaben übernehmen if (tempServerConnection == null || tempClientConnection == null) { // Fehler beim Parsen MessageBox.Show(this, "Beim Einlesen mindestens einer der Angaben ist ein Fehler aufgetreten." + Environment.NewLine + "Bitte die Schreibweise der IP-Adressen und Portnummern überprüfen.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } else { // Server-Daten speichern connectionSettings.ServerConnection.Address = tempServerConnection.Address; connectionSettings.ServerConnection.PortNumber = tempServerConnection.PortNumber; // Client-Daten speichern connectionSettings.ClientConnection.Address = tempClientConnection.Address; connectionSettings.ClientConnection.PortNumber = tempClientConnection.PortNumber; // Name speichern (muss zwischen 3 und 8 Zeichen lang sein) if (NameTextBox.Text.Length > 8) { connectionSettings.UserName = NameTextBox.Text.Substring(0, 8); } else if (NameTextBox.Text.Length < 3) { connectionSettings.UserName = GetRandomName(); } else { connectionSettings.UserName = NameTextBox.Text; } // Schlüssel speichern connectionSettings.Key = KeyTextBox.Text; // Einstellungen speichern connectionSettings.Save(); // Dialog-Result setzen und schließen DialogResult = true; Close(); } }
/// <summary> /// Von außen zugängliche Methode zum Start /// des Empfangsvorgangs /// </summary> /// <param name="connection">Verbindungsdaten (z.Zt. wird nur die Portnummer verwendet)</param> public void BeginListen(ChatConnection connection) { this.connection = connection; // BackgroundWorker starten try { serverBackgroundWorker.RunWorkerAsync(new ServerBackgroundWorkerArgs { PortNumber = connection.PortNumber }); } catch (Exception) { throw; } }
/// <summary> /// Entfernt einen Host aus der Liste /// </summary> /// <param name="endPoint">IPEndPoint des Hosts</param> private void RemoveClient(EndPoint endPoint) { ChatConnection index = null; // Host in der Liste suchen und speichern foreach (ChatConnection connection in clientList) { if (connection.Address == ((IPEndPoint)endPoint).Address) { index = connection; break; } } // Falls gefunden, entfernen if (index != null) { clientList.Remove(index); } }
/// <summary> /// Liest die Einstellungen aus einer Datei /// </summary> /// <param name="filename">Dateiname</param> public void Load(string filename = "settings.txt") { // Überprüfen, ob Datei vorhanden ist if (File.Exists(filename)) { List <string> lines = File.ReadAllLines(filename, Encoding.UTF8).ToList(); // Nur bei wohldefinierter Datei Versuch unternehmen, zu lesen if (lines.Count == 4) { ServerConnection = new ChatConnection(lines[0]); ClientConnection = new ChatConnection(lines[1]); if (lines[2].Length > 2 && lines[2].Length < 9) { UserName = lines[2]; } Key = lines[3]; } } }