private void TextChangedHandler(object Sender, TextChangedEventArgs Args)
        {
            string NewText    = AddressField.Text;
            int    ColonCount = NewText.Count(Symbol => Symbol == ':');

            if (ColonCount == 0)
            {
                AddButton.IsEnabled = HostnameRegex.IsMatch(NewText) || IPRegex.IsMatch(NewText);
            }
            else if (ColonCount == 1)
            {
                int    ColonIndex = NewText.IndexOf(':');
                string Host       = NewText.Substring(0, ColonIndex);
                AddButton.IsEnabled = (HostnameRegex.IsMatch(Host) || IPRegex.IsMatch(Host)) && ushort.TryParse(NewText.Substring(++ColonIndex), out _);
            }
            else
            {
                AddButton.IsEnabled = false;
            }
        }
        private async void Add(object Sender, RoutedEventArgs Args)
        {
            string Address = AddressField.Text, Host;
            int    Port = -1;

            if (Address.Count(Symbol => Symbol == ':') == 0)
            {
                Host = Address;
            }
            else
            {
                int ColonIndex = Address.IndexOf(':');
                Host = Address.Substring(0, ColonIndex);
                Port = int.Parse(Address.Substring(++ColonIndex));
            }
            bool      IsDomain = false;
            IPAddress IP       = null;

            if (!(IPRegex.IsMatch(Host) && TryParse(Host, out IP)))
            {
                IsDomain = true;
                SetStatus(LocString(LocCode.ResolvingIP), YellowBrush);
                try { IP = (await GetHostAddressesAsync(Host))[0]; }
                catch { }
            }
            if (IP is null)
            {
                SetStatus(LocString(LocCode.NoIPFound), DarkRed);
            }
            else
            {
                AddressField.IsReadOnly = true;
                AddButton.IsEnabled     = false;
                if (Port == -1)
                {
                    SetStatus(LocString(LocCode.ScanningServers), YellowBrush);
                    Server[] Servers = await GetServersForIPAsync(IP);

                    if (Servers is null)
                    {
                        SetStatus(LocString(LocCode.NoServersFound), DarkRed);
                    }
                    else
                    {
                        SetStatus(string.Format(LocString(LocCode.AddServersSuccess), Servers.Length), DarkGreen);
                        if (Instance.CurrentPage is ClusterPage Page && Page.Cluster.Discord is null)
                        {
                            foreach (Server Server in Servers)
                            {
                                Page.ServersList.Children.Add(new ServerItem(Server));
                            }
                        }
                        foreach (Server Server in Servers)
                        {
                            UServers.Add(new KeyValuePair <Server, string>(Server, IsDomain ? Host : null));
                        }
                        CommitList();
                        QueueUserWorkItem((State) =>
                        {
                            foreach (Server Server in Servers)
                            {
                                Server.Refresh();
                            }
                        });
                    }
                }
                else
                {
                    SetStatus(LocString(LocCode.RequestingSrvInfo), YellowBrush);
                    Server Server = (await ResolveServerAsync(IP, Port)) ?? await FindServerAsync(IP, Port);

                    if (Server is null)
                    {
                        SetStatus(LocString(LocCode.SrvDidnRespond), DarkRed);
                    }
                    else if ((int)Server.Code == -1)
                    {
                        SetStatus(LocString(LocCode.SrvNotSpacewar), DarkRed);
                    }
                    else
                    {
                        SetStatus(LocString(LocCode.AddServerSuccess), DarkGreen);
                        if (Instance.CurrentPage is ClusterPage Page && Page.Cluster.Discord is null)
                        {
                            Page.ServersList.Children.Add(new ServerItem(Server));
                        }
                        UServers.Add(new KeyValuePair <Server, string>(Server, IsDomain ? Host : null));
                        CommitList();
                        QueueUserWorkItem((State) => Server.Refresh());
                    }
                }
                AddressField.IsReadOnly = false;
                AddButton.IsEnabled     = true;
            }
        }