Example #1
0
        /*
         * Metodo che riabilita l'interfaccia in caso di connessione non riuscita
         * Altrimenti crea la MultiMainWindow (se non seiste già) aggiungendo la tab con le varie informazioni
         */
        private void requestConnection(IAsyncResult result)
        {
            Client_info info = result.AsyncState as Client_info;

            // Caso in cui la connessione non è andata a buon fine
            if ((info == null) || (!info.client.Connected))
            {
                MessageBox.Show("Impossibile stabilire una connesione");
                this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => {
                    // Riabilitazione dell'interfaccia
                    ConnectionButton.IsEnabled = true;
                    IPTextBox1.IsEnabled       = IPTextBox2.IsEnabled = IPTextBox3.IsEnabled = IPTextBox4.IsEnabled = true;
                    PortTextBox.IsEnabled      = true;
                    this.Cursor = Cursors.Arrow;
                }));
                return;
            }

            NetworkStream stream = info.client.GetStream();

            stream.ReadTimeout = 5000;

            // Ricerca tra le finestre dell'applicazione di una MultiMainWindow.
            this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
            {
                foreach (Window window in System.Windows.Application.Current.Windows)
                {
                    if (window is MultiMainWindow)
                    {
                        // Se esiste gà una MultiMainWindow, viene aggiunta una nuova Tab
                        MultiMainWindow w = window as MultiMainWindow;
                        w.addTab(info.client, stream, info.indirizzo);
                        w.connessioni_attive.Add(info.indirizzo);
                        this.Close();
                        return;
                    }
                }
                // Altrimenti viene creata la MultiMainWindow
                MultiMainWindow main = new MultiMainWindow(info.client, stream, info.indirizzo);
                main.connessioni_attive.Add(info.indirizzo);
                this.Close();
                main.Show();
            }));

            try {
                info.client.EndConnect(result);
            } catch (SocketException) {
                // In caso di errore sul socket la nuova Tab viene chiusa
                ExceptionHandler.IntroConnectionError();
            } catch (ObjectDisposedException) {
                // In caso di socket chiuso la nuova Tab viene chiusa
                ExceptionHandler.IntroConnectionError();
            }
        }
Example #2
0
 static public void IntroConnectionError()
 {
     foreach (Window window in System.Windows.Application.Current.Windows)
     {
         if (window is MultiMainWindow)
         {
             MultiMainWindow w = window as MultiMainWindow;
             ExceptionHandler.ReceiveConnectionError(w.tabItems[w.tabItems.Count - 1].TabElement);
             break;
         }
     }
 }
Example #3
0
 static public void MemoryError(uint attempt, MultiMainWindow main)
 {
     if (attempt > 1)
     {
         attempt--;
         System.GC.Collect();
     }
     else
     {
         MessageBox.Show("Errore irreversibile di memoria.", "Errore", MessageBoxButton.OK, MessageBoxImage.Error);
         main.error = true;
         main.Dispatcher.Invoke(DispatcherPriority.Send, new Action(() => { Application.Current.Shutdown(); }));
     }
 }
Example #4
0
 public InteractiveTabItem(MultiMainWindow main)
 {
     MainWindow = main;
 }
Example #5
0
 static public void MemoryError(MultiMainWindow main)
 {
     MessageBox.Show("Errore irreversibile di memoria.", "Errore", MessageBoxButton.OK, MessageBoxImage.Error);
     main.error = true;
     main.Dispatcher.Invoke(DispatcherPriority.Send, new Action(() => { Application.Current.Shutdown(); }));
 }
Example #6
0
        /*
         * Metodo invocato dall'evento Click del pulsante
         * Conversione dei parametri e avvio del tentativo di connessione
         */
        private void ConnectionClick(object sender, RoutedEventArgs e)
        {
            string indirizzo = IPTextBox1.Text + "." + IPTextBox2.Text + "." + IPTextBox3.Text + "." + IPTextBox4.Text;

            if (indirizzo == "0.0.0.0")
            {
                MessageBox.Show("Impossibile connettersi all'host specificato", "Attenzione", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }

            Int32 porta;

            try {
                porta = Convert.ToInt32(PortTextBox.Text);
            }
            catch (FormatException) {
                porta = 2000;
            }
            catch (OverflowException) {
                porta = 2000;
            }

            // Verifica dell'esistenza di una tab connessa allo stesso indirizzo
            foreach (Window window in System.Windows.Application.Current.Windows)
            {
                if (window is MultiMainWindow)
                {
                    MultiMainWindow m = window as MultiMainWindow;
                    if (m.connessioni_attive.Contains(indirizzo))
                    {
                        MessageBox.Show("Connessione già effettuata verso " + indirizzo);
                        return;
                    }
                }
            }

            Console.WriteLine("Connessione verso: {0} - {1}", indirizzo, porta);

            try {
                client = new TcpClient();
                Client_info info = new Client_info();
                info.client    = client;
                info.indirizzo = indirizzo;
                // Richiesta di connessione asincrona per non bloccare l'interfaccia
                this.connectionResult = client.BeginConnect(indirizzo, porta, new AsyncCallback(requestConnection), info);
                // Disabilitazione dell'interfaccia per evitare più richieste contemporanee
                ConnectionButton.IsEnabled = false;
                IPTextBox1.IsEnabled       = IPTextBox2.IsEnabled = IPTextBox3.IsEnabled = IPTextBox4.IsEnabled = false;
                PortTextBox.IsEnabled      = false;
                this.Cursor = Cursors.AppStarting;
            }
            catch (SecurityException) {
                MessageBox.Show("Accesso negato: permessi non sufficienti", "Attenzione", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
            catch (ObjectDisposedException) {
                MessageBox.Show("Errore di connessione", "Attenzione", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
            catch (ArgumentOutOfRangeException) {
                MessageBox.Show("Numero di porta non valido, valori ammessi: 1-65536", "Attenzione", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            catch (SocketException) {
                MessageBox.Show("Impossibile stabilire una connesione", "Attenzione", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        }