protected void ShowVirtualMachineInfo(bool closeParentWindow)
        {
            if (this.InvokeRequired == true)
            {
                this.Invoke(new ShowVirtualMachineInfoDelegate(ShowVirtualMachineInfo), closeParentWindow);
                return;
            }

            var virtualMachineInfo = new VirtualMachineInfo();
            virtualMachineInfo.TopMost = true;
            virtualMachineInfo.ShowDialog();

            if (closeParentWindow == true)
            {
                this.DialogResult = System.Windows.Forms.DialogResult.Abort;
                //this.CloseForm();
            }
        }
        protected void ShowVirtualMachineInfo(bool closeParentWindow)
        {
            if (this.InvokeRequired == true)
            {
                this.Invoke(new ShowVirtualMachineInfoDelegate(ShowVirtualMachineInfo), closeParentWindow);
                return;
            }

            var virtualMachineInfo = new VirtualMachineInfo();

            virtualMachineInfo.TopMost = true;
            virtualMachineInfo.ShowDialog();

            if (closeParentWindow == true)
            {
                this.DialogResult = System.Windows.Forms.DialogResult.Abort;
                //this.CloseForm();
            }
        }
        internal void LoginToLobby(LobbyType lobbyType)
        {
            //Verify the form is filled out
            if (string.IsNullOrEmpty(_loginComboBox.Text))
            {
                return;
            }

            // TODO: Figure out where the alleg exe is and send it to the launcher.

            //Create a new session
            var signal = new TaskDelegate(delegate(object input)
            {
                var parameters = input as object[];
                var status     = (CheckInStatus)parameters[0];
                var message    = parameters[1] as string;
                var alias      = parameters[2] as string;
                var ticket     = parameters[3] as string;

                int rank = 0;

                if (parameters[4] != null)
                {
                    rank = (int)parameters[4];
                }

                Regex aliasFinder = new Regex(
                    "(?<callsign>.*?)(\\(\\d+\\))?$",
                    RegexOptions.ExplicitCapture
                    | RegexOptions.CultureInvariant
                    | RegexOptions.Compiled
                    );

                var match = aliasFinder.Match(alias);
                if (match.Success == true)
                {
                    alias = match.Groups["callsign"].Value;
                }

                if (status == CheckInStatus.AccountLinked)
                {
                    if (ReloadCallsigns != null)
                    {
                        ReloadCallsigns();
                    }
                }

                if (status == CheckInStatus.Ok || status == CheckInStatus.AccountLinked)
                {
                    //Initialize check-in interval
                    CheckInTimer          = new Timer();
                    CheckInTimer.Interval = CheckInInterval;
                    CheckInTimer.Tick    += new EventHandler(CheckInTimer_Tick);
                    CheckInTimer.Start();

                    //Launch Allegiance
                    MainForm.SetStatusBar("Launching Allegiance...");

                    //Store last-used alias
                    if (!string.Equals(DataStore.LastAlias, alias))
                    {
                        DataStore.LastAlias = alias;
                        DataStore.Instance.Save();
                    }

                    if (rank <= 5)
                    {
                        alias += "(" + rank + ")";
                    }


                    AllegianceLoader.StartAllegiance(ticket, lobbyType, alias, delegate(object param)
                    {
                        var result = (bool)param;

                        if (!result)
                        {
                            Logout();

                            MainForm.SetStatusBar("Failed to launch Allegiance.");
                        }
                        else
                        {
                            //AllegianceLoader.AllegianceProcess.OnExiting
                            //  += new EventHandler(AllegianceProcess_OnExiting);

                            AllegianceLoader.AllegianceExit
                                += new EventHandler(AllegianceProcess_OnExiting);
                        }
                    });

                    SetLoggedIn(true);

                    if (DataStore.Preferences.AutoLogin)
                    {
                        MainForm.HideForm();
                    }
                }
                else
                {
                    MainForm.SetStatusBar(message);

                    if (status == CheckInStatus.VirtualMachineBlocked)
                    {
                        VirtualMachineInfo virtualMachineInfo = new VirtualMachineInfo();
                        virtualMachineInfo.ShowDialog();
                    }

                    this.Enabled = true;

                    SystemWatcher.Close();
                }
            });

            SessionNegotiator.Login(_loginComboBox.Text, lobbyType.ToString(), delegate(object input)
            {
                if (this.InvokeRequired)
                {
                    this.Invoke(signal, input);
                }
                else
                {
                    signal(input);
                }
            });
        }
        internal void LoginToLobby(LobbyType lobbyType)
        {
            //Verify the form is filled out
            if (string.IsNullOrEmpty(_loginComboBox.Text))
                return;

            // TODO: Figure out where the alleg exe is and send it to the launcher.

            //Create a new session
            var signal = new TaskDelegate(delegate(object input)
            {
                var parameters  = input as object[];
                var status   = (CheckInStatus)parameters[0];
                var message     = parameters[1] as string;
                var alias       = parameters[2] as string;
                var ticket      = parameters[3] as string;

                int rank = 0;

                if (parameters[4] != null)
                    rank = (int)parameters[4];

                Regex aliasFinder = new Regex(
                      "(?<callsign>.*?)(\\(\\d+\\))?$",
                    RegexOptions.ExplicitCapture
                    | RegexOptions.CultureInvariant
                    | RegexOptions.Compiled
                    );

                var match = aliasFinder.Match(alias);
                if (match.Success == true)
                    alias = match.Groups["callsign"].Value;

                if (status == CheckInStatus.AccountLinked)
                {
                    if (ReloadCallsigns != null)
                        ReloadCallsigns();
                }

                if (status == CheckInStatus.Ok || status == CheckInStatus.AccountLinked)
                {
                    //Initialize check-in interval
                    CheckInTimer            = new Timer();
                    CheckInTimer.Interval   = CheckInInterval;
                    CheckInTimer.Tick       += new EventHandler(CheckInTimer_Tick);
                    CheckInTimer.Start();

                    //Launch Allegiance
                    MainForm.SetStatusBar("Launching Allegiance...");

                    //Store last-used alias
                    if (!string.Equals(DataStore.LastAlias, alias))
                    {
                        DataStore.LastAlias = alias;
                        DataStore.Instance.Save();
                    }

                    if (rank <= 5)
                        alias += "(" + rank + ")";

                    AllegianceLoader.StartAllegiance(ticket, lobbyType, alias, delegate(object param)
                    {
                        var result = (bool)param;

                        if (!result)
                        {
                            Logout();

                            MainForm.SetStatusBar("Failed to launch Allegiance.");
                        }
                        else
                        {
                            //AllegianceLoader.AllegianceProcess.OnExiting
                              //  += new EventHandler(AllegianceProcess_OnExiting);

                            AllegianceLoader.AllegianceExit
                                += new EventHandler(AllegianceProcess_OnExiting);
                        }
                    });

                    SetLoggedIn(true);

                    if (DataStore.Preferences.AutoLogin)
                        MainForm.HideForm();
                }
                else
                {
                    MainForm.SetStatusBar(message);

                    if (status == CheckInStatus.VirtualMachineBlocked)
                    {
                        VirtualMachineInfo virtualMachineInfo = new VirtualMachineInfo();
                        virtualMachineInfo.ShowDialog();
                    }

                    this.Enabled = true;

                    SystemWatcher.Close();
                }
            });

            SessionNegotiator.Login(_loginComboBox.Text, lobbyType.ToString(), delegate(object input)
            {
                if (this.InvokeRequired)
                    this.Invoke(signal, input);
                else
                    signal(input);
            });
        }