public async Task <bool> ShutDownServer(string ip, uint port)
 {
     try
     {
         Thread.Sleep(30000);
         this.Clients.All.ChangeServer(ip, port);
         Server.ShutDown();
         if (await CommunicationProxy.ConnectToServer(ip, port))
         {
             BsaContext.Initialize(ip, BsaContext.GetUserName(), ApplicationRole.Client);
             MessageBox.Show("Sie sind jetz nicht mehr Server, sondern nur noch Client!");
             return(true);
         }
         else
         {
             MessageBox.Show("Der Wechsel hat nicht funktioniert! Bitte starten Sie neu und verbinden sich manuell!");
             Cursor.Current = Cursors.Default;
             return(false);
         }
     }
     catch (SystemException e)
     {
         return(false);
     }
 }
            private async Task <bool> ConnectToServerAsync()
            {
                string ipAddress = string.Empty;
                var    result    = this.InputBox("IP angeben", "Bitte geben Sie die neue IP Adresse an", ref ipAddress);

                if (result == DialogResult.OK)
                {
                    if (await CommunicationProxy.ConnectToServer(ipAddress, 8081) == false)
                    {
                        MessageBox.Show(
                            @"Die Anwendung konnte nicht mit dem angegebenen Server verbunden werden! Bitte überprüfen Sie ihre Angaben!");
                    }
                    else
                    {
                        return(true);
                    }
                }

                return(false);
            }
            public DisconnectMessageBox()
            {
                this.reconnectButton.Text    = @"Erneut verbinden";
                this.getServerButton.Text    = @"Server werden";
                this.connectOtherButton.Text = @"Mit anderem Server verbinden";

                this.reconnectButton.Click += async(a, b) =>
                {
                    this.ChangeButtonIsEnabled(false);
                    var success = await CommunicationProxy.ConnectToServer(BsaContext.GetURL(), 8081);

                    if (success)
                    {
                        this.Close();
                    }

                    this.ChangeButtonIsEnabled(true);
                };

                this.getServerButton.Click += (a, b) =>
                {
                    this.ChangeButtonIsEnabled(false);
                    if (UacHelper.RestartWithAdminRights("") == false)
                    {
                        this.ChangeButtonIsEnabled(true);
                        return;
                    }

                    Process.GetCurrentProcess().Kill();
                };

                this.connectOtherButton.Click += async(a, b) =>
                {
                    this.ChangeButtonIsEnabled(false);
                    var success = await this.ConnectToServerAsync();

                    if (success == false)
                    {
                        this.ChangeButtonIsEnabled(true);
                    }
                    else
                    {
                        this.Close();
                    }
                };

                var l = new Label {
                    Text = @"Die Verbindung zum Server ist getrennt. Was möchten Sie jetzt tun?"
                };

                l.SetBounds(100, 30, 450, 50);
                this.reconnectButton.SetBounds(50, 100, 150, 50);
                this.getServerButton.SetBounds(250, 100, 150, 50);
                this.connectOtherButton.SetBounds(450, 100, 150, 50);

                this.connectOtherButton.Anchor = this.connectOtherButton.Anchor | AnchorStyles.Right;
                this.reconnectButton.Anchor    = AnchorStyles.Bottom | AnchorStyles.Right;
                this.getServerButton.Anchor    = AnchorStyles.Bottom | AnchorStyles.Right;
                this.Text       = @"Fehler";
                this.ClientSize = new Size(650, 200);
                this.Controls.AddRange(new Control[] { l, this.reconnectButton, this.getServerButton, this.connectOtherButton });
                this.FormBorderStyle = FormBorderStyle.FixedDialog;
                this.StartPosition   = FormStartPosition.CenterScreen;
                this.MinimizeBox     = false;
                this.MaximizeBox     = false;

                this.ShowDialog();
            }