/// <summary>
        /// Costruttore della classe ServerTabManagement
        /// </summary>
        /// <param name="DTI"> Tab Item del server al quale è associato l'oggetto corrente </param>
        public ServerTabManagement(DynamicTabItem DTI)
        {
            InitializeComponent();

            ServerTab = DTI;

            // Ogni ServerTab si iscrive all'evento di chiusura della mainwindow
            ServerTab.MainWndw.ClosingEvent += ServerTabClose;

            // Si impostano i timestamp iniziali all'istante corrente
            ServerTabBirth = LastPercentageUpdate = DateTime.Now;

            // La percentuale viene aggiornata ogni 1000 ms
            PercentageRefreshTimer = new System.Timers.Timer(1000);

            // Impostiamo il timer come ricorsivo: al termine dei 1000 ms riparte da zero e ricomincia
            PercentageRefreshTimer.AutoReset = true;

            // Allo scadere del timer, si lancia la funzione di aggiornamento della percentuale (PercentageRefresh)
            PercentageRefreshTimer.Elapsed += (obj, e) =>
            {
                Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => { PercentageRefresh(); }));
            };

            // Inizializzazione della lista di applicazioni (inizialmente vuota)
            Applications = new ObservableCollection <AppItem>();

            // Associazione della lista delle applicazioni all'elemento WPF Applist
            Applist.ItemsSource = Applications;

            // Abilitazione dell'accesso alla lista da parte di più thread
            BindingOperations.EnableCollectionSynchronization(Applications, Applications);
        }
예제 #2
0
        /// <summary>
        /// Funzione che chiude un singolo tab
        /// </summary>
        /// <param name="tab">Riferimento al tab da chiudere</param>
        public void CloseTab(DynamicTabItem tab)
        {
            // Caso in cui il tab da chiudere sia l'ultimo attivo: chiusura dell'intera finestra
            if (ServerTabs.Count == 1)
            {
                this.Close();
                return;
            }

            ServerTabManagement servertab = tab.ServerTab;

            // In caso di chiusura della main window, la funzione di chiusura di questo tab non andrà più eseguita
            ClosingEvent -= servertab.ServerTabClose;

            // Chiusura del tab
            servertab.ServerTabClose();

            // Rimozione di questo tab dalla lista dei tab dei server
            ServerTabs.Remove(tab);

            // Rimozione dei questa connessione dalla lista di connessioni attive
            ActiveConnections.Remove(tab.RemoteHost);

            if (ServerTabs.Count == 1)
            {
                ForegroundAppsBox.IsEnabled = false;
            }
        }
예제 #3
0
        /// <summary>
        /// Funzione che crea un nuovo tab
        /// </summary>
        /// <param name="client"></param>
        /// <param name="stream"></param>
        /// <param name="address"></param>
        public void NewTab(TcpClient client, NetworkStream stream, String address)
        {
            DynamicTabItem      tab = new DynamicTabItem(this);
            ServerTabManagement s   = new ServerTabManagement(tab);

            tab.ServerTab = s;

            // Il titolo del nuovo tab ed il suo host remoto corrispondono all'indirizzo del server
            tab.DynamicHeader = tab.RemoteHost = address;

            if (address.StartsWith("127."))
            {
                tab.DynamicHeader = "Loopback";
            }
            else
            {
                Dns.BeginGetHostEntry(address, new AsyncCallback((IAsyncResult ar) =>
                {
                    try
                    {
                        string host = Dns.EndGetHostEntry(ar).HostName;
                        this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
                        {
                            tab.DynamicHeader = host;
                        }));
                    }
                    catch (SocketException)
                    {
                        Console.WriteLine("Server {0}: Nessun host trovato", address);
                    }
                }), null);
            }

            s.Connection = client;
            s.Stream     = stream;
            s.StartServerDataExchange();
            tab.Content = s;

            // Aggiunta del nuovo tab alla lista
            ServerTabs.Add(tab);

            // Evidenziazione dell'ultimo tab creato
            ServerTabControl.SelectedIndex = ServerTabs.Count - 1;

            if (ServerTabs.Count > 1)
            {
                ForegroundAppsBox.IsEnabled = true;
            }
        }