DisconnectEngineFromGUI() public static method

public static DisconnectEngineFromGUI ( ) : void
return void
Example #1
0
        public static void ReconnectEngineToGUI()
        {
            Trace.Call();

            Frontend.DisconnectEngineFromGUI();
            _MainWindow.EngineManager.Reconnect();
            Session     = _MainWindow.EngineManager.Session;
            _UserConfig = _MainWindow.EngineManager.UserConfig;
            Frontend.ConnectEngineToGUI();
        }
Example #2
0
        void OnStateChanged(int state)
        {
            Trace.Call(state);

            if (!Frontend.HadSession)
            {
                return;
            }

            switch (state)
            {
            case (int)StateNM9.Disconnecting:
                if (!Frontend.IsLocalEngine)
                {
                    Frontend.DisconnectEngineFromGUI(true);
                }
                break;

            case (int)StateNM8.Disconnected:
            case (int)StateNM9.Disconnected:
                WasLocalEngine = Frontend.IsLocalEngine;
                if (!Frontend.IsLocalEngine)
                {
                    Frontend.DisconnectEngineFromGUI(false);
                }
                break;

            case (int)StateNM8.Connected:
            case (int)StateNM9.ConnectedSite:
            case (int)StateNM9.ConnectedGlobal:
                if (WasLocalEngine)
                {
                    // reconnect local protocol managers
                    foreach (var protocolManager in Frontend.Session.ProtocolManagers)
                    {
                        var pm = protocolManager;
                        // run in background so it can't block the GUI
                        ThreadPool.QueueUserWorkItem(delegate {
                            try {
                                pm.Reconnect(Frontend.FrontendManager);
                            } catch (Exception ex) {
                                Frontend.ShowException(ex);
                            }
                        });
                    }
                }
                else
                {
                    Frontend.ReconnectEngineToGUI(false);
                }
                break;
            }
        }
Example #3
0
        private void _OnSwitchRemoteEngineButtonClicked(object obj, EventArgs args)
        {
            Trace.Call(obj, args);

            try {
                Gtk.MessageDialog md = new Gtk.MessageDialog(null, Gtk.DialogFlags.Modal,
                                                             Gtk.MessageType.Warning, Gtk.ButtonsType.YesNo,
                                                             _("Switching the remote engine will disconnect you from the current engine!\n" +
                                                               "Are you sure you want to do this?"));
                int result = md.Run();
                md.Destroy();
                if ((Gtk.ResponseType)result == Gtk.ResponseType.Yes)
                {
                    Frontend.DisconnectEngineFromGUI();
                    Frontend.ShowEngineManagerDialog();
                }
            } catch (Exception ex) {
                Frontend.ShowException(this, ex);
            }
        }
Example #4
0
        protected void OnSwitchRemoteEngineActionActivated(object sender, EventArgs e)
        {
            Trace.Call(sender, e);

            try {
                var dialog = new Gtk.MessageDialog(
                    Parent, Gtk.DialogFlags.Modal,
                    Gtk.MessageType.Warning, Gtk.ButtonsType.YesNo,
                    _("Switching the remote engine will disconnect you from the current engine!\n" +
                      "Are you sure you want to do this?")
                    );
                int result = dialog.Run();
                dialog.Destroy();
                if ((Gtk.ResponseType)result == Gtk.ResponseType.Yes)
                {
                    Frontend.DisconnectEngineFromGUI();
                    Frontend.ShowEngineManagerDialog();
                }
            } catch (Exception ex) {
                Frontend.ShowException(Parent, ex);
            }
        }
Example #5
0
        public static void ReconnectEngineToGUI(bool cleanly)
        {
            Trace.Call(cleanly);

            if (_InReconnectHandler)
            {
#if LOG4NET
                _Logger.Debug("ReconnectEngineToGUI(): already in reconnect " +
                              "handler, ignoring reconnect...");
#endif
                return;
            }

            _InReconnectHandler = true;
            var disconnectedEvent = new AutoResetEvent(false);
            ThreadPool.QueueUserWorkItem(delegate {
                try {
                    // delay the disconnect to give the reconnect some extra
                    // time as NetworkManager is not accurate about when the
                    // network is really ready
                    GLib.Timeout.Add(5 * 1000, delegate {
                        Frontend.DisconnectEngineFromGUI(cleanly);
                        disconnectedEvent.Set();
                        return(false);
                    });

                    var successful = false;
                    var attempt    = 1;
                    while (!successful)
                    {
                        Gtk.Application.Invoke(delegate {
                            MainWindow.NetworkStatus = null;
                            MainWindow.Status        = String.Format(
                                _("Reconnecting to engine... (attempt {0})"),
                                attempt++
                                );
                        });
                        try {
                            disconnectedEvent.WaitOne();
                            _MainWindow.EngineManager.Reconnect();
                            successful = true;
                        } catch (Exception ex) {
#if LOG4NET
                            _Logger.Debug("ReconnectEngineToGUI(): Exception", ex);
#endif
                            disconnectedEvent.Set();
                            Thread.Sleep(30 * 1000);
                        }
                    }
                    _UserConfig           = _MainWindow.EngineManager.UserConfig;
                    EngineAssemblyVersion = _MainWindow.EngineManager.EngineAssemblyVersion;
                    EngineProtocolVersion = _MainWindow.EngineManager.EngineProtocolVersion;
                    Session = _MainWindow.EngineManager.Session;

                    Gtk.Application.Invoke(delegate {
                        Frontend.ConnectEngineToGUI();
                    });
                } catch (Exception ex) {
                    Frontend.ShowException(ex);
                } finally {
                    _InReconnectHandler = false;
                }
            });
        }