Example #1
0
 void connection_ServerConnected(object sender, args.ServerEventArgs e)
 {
     //lo rimuovo dalla lista dei server trovati(lista in alto)
     serverTrovati.Remove(e.Server);
     //lo aggiungo alla lista dei server connessi(lista in basso)
     serverAggiunti.Add(e.Server);
 }
Example #2
0
 void connection_ServerDisconnected(object sender, args.ServerEventArgs e)
 {
     //lo rimuova dalla lista sotto
     serverAggiunti.Remove(e.Server);
     //lo inserisce nella lista sopra
     if (!serverTrovati.Contains(e.Server))
     {
         serverTrovati.Add(e.Server);
     }
 }
Example #3
0
 private void connection_ServerDeactivated(object sender, args.ServerEventArgs e)
 {
     if (e.Position < 0 || e.Position >= serverTiles.Count)
     {
         Trace.TraceError("Posizione è fuori range. Pisition:{0} Length:{1}. In connection_ServerDeactivated() ", e.Position, serverTiles.Count);
         return;
     }
     //deseleziono la card
     serverTiles[e.Position].Effect = (System.Windows.Media.Effects.Effect) this.Resources["z-depth1"];
 }
Example #4
0
        void connection_ServerFound(object sender, args.ServerEventArgs e)
        {
            Console.WriteLine("server aggiunto");
            Server server = e.Server;

            if (!serverTrovati.Contains(e.Server))
            {
                serverTrovati.Add(server);
            }
        }
Example #5
0
 private void connection_ServerActivated(object sender, args.ServerEventArgs e)
 {
     if (e.Position < 0 || e.Position >= serverTiles.Count)
     {
         Trace.TraceError("Posizione è fuori range. Pisition:{0} Length:{1}. In connection_ServerActivated() ", e.Position, serverTiles.Count);
         return;
     }
     //seleziono il server attivo
     selectedIndex = e.Position;
     serverTiles[selectedIndex].Effect = (System.Windows.Media.Effects.Effect) this.Resources["z-depth5"];
 }
Example #6
0
        void connection_ServerAuthRequired(object sender, args.ServerEventArgs e)
        {
            Server server = e.Server;
            InserisciPasswordDialogBox ipDialogBox = new InserisciPasswordDialogBox(server.Name);

            ipDialogBox.Owner = this;
            ipDialogBox.ShowDialog();
            if (ipDialogBox.DialogResult.HasValue && (bool)ipDialogBox.DialogResult)
            {
                //Password inserita
                string password = ipDialogBox.Password;
                server.Password = password;
                connection.Connect(ref server);
            }
        }
Example #7
0
        void connection_ServerDisconnected(object sender, args.ServerEventArgs e)
        {
            if (e.Position < 0 || e.Position >= serverTiles.Count)
            {
                Trace.TraceError("Posizione è fuori range. Pisition:{0} Length:{1}. In connection_ServerActivated() ", e.Position, serverTiles.Count);
                return;
            }
            //rimuovo dalla lista dei server
            servers.RemoveAt(e.Position);
            //rimuovo la tile
            ServerTileUserControl tile = serverTiles[e.Position];

            stackPanel.Children.Remove(tile);
            serverTiles.RemoveAt(e.Position);

            if (servers.Count == 0)
            {
                this.Close();
            }
        }
 private void setActive(ServerConnection serverCon)
 {
     //attivo il server
     serverCon.Active();
     Trace.TraceInformation("Server attivo. Server: {0}:{1}:{2}", serverCon.Server.Name, serverCon.Server.IP, serverCon.Server.ControlPort);
     //controllo se il server si è attivato o vi è stato qualche problema
     if (!serverCon.GetState().Equals("ACTIVE")) { return; }
     //cambio il serverAttivoIndex
     serverAttivoIndex = serverConnessi.IndexOf(serverCon);
     //inizializzo l'evento
     ServerEventArgs args = new ServerEventArgs()
     {
         Server = serverCon.Server,
         Position = serverAttivoIndex
     };
     EventHandler<ServerEventArgs> handler = ServerActivated;
     if (handler != null)
     {
         handler(this, args);
     }
 }
 void riceviInfoServerWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
 {
     Server server = (Server)e.UserState;
     ServerEventArgs args = new ServerEventArgs { Server = server, Position = -1 };
     EventHandler<ServerEventArgs> handler = ServerFound;
     if (handler != null) { handler(this, args); }
 }
 void connectServerWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
 {
     if (e.UserState == null)
     {
         Server server = null;
         while (!serverToConnect.TryDequeue(out server)) ;
         ServerConnection serverToInsert = new ServerConnection(server, this);
         ServerEventArgs args = null;
         serverConnessi.Add(serverToInsert);
         args = new ServerEventArgs()
         {
             Server = server,
             Position = serverConnessi.IndexOf(serverToInsert)
         };
         EventHandler<ServerEventArgs> handler = ServerConnected;
         if (handler != null)
         {
             handler(this, args);
         }
     }
     else if (e.ProgressPercentage == ERROR)
     {
         ServerErrorEventsArgs args = (ServerErrorEventsArgs)e.UserState;
         EventHandler<ServerErrorEventsArgs> handler = ServerError;
         if (handler != null)
         {
             handler(this, args);
         }
     }
     else if (e.ProgressPercentage == PASSWORD_REQUIRED)
     {
         ServerEventArgs args = (ServerEventArgs)e.UserState;
         EventHandler<ServerEventArgs> handler = ServerAuthRequired;
         if (handler != null) { handler(this, args); }
     }
     else if (e.ProgressPercentage == PASSWORD_ERROR)
     {
         ServerErrorEventsArgs args = (ServerErrorEventsArgs)e.UserState;
         EventHandler<ServerErrorEventsArgs> handler = ServerError;
         if (handler != null) { handler(this, args); }
     }
 }
        void connectServerWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = (BackgroundWorker)sender;
            NetworkStream stream = null;
            Server server = null;
            cancellationTokenSource = new CancellationTokenSource();
            while (!worker.CancellationPending)
            {
                try
                {
                    serverInConnessione.TryTake(out server, -1, cancellationTokenSource.Token);

                    //connessione TCP con Server
                    server.TCPControlChannel = new TcpClient(server.IP, server.ControlPort);
                    stream = server.TCPControlChannel.GetStream();
                    stream.ReadTimeout = TIMEOUT;

                    //invio richiesta di login
                    byte[] reqLogin = Encoding.ASCII.GetBytes(TipoComando.REQUEST_LOGIN);
                    WriteMessage(stream, reqLogin, 0, reqLogin.Length);

                    //aspetto di ricevere la conferma di richiesta insieme alla string sfida
                    byte[] challengeMessage = new byte[1024];
                    ReadMessage(stream, challengeMessage, 0, 6);
                    String messageString = Encoding.ASCII.GetString(challengeMessage, 0, 6);

                    if (messageString.Equals(TipoComando.LOGIN_CHALLENGE))
                    {
                        //leggo il nonce
                        byte[] challenge = new byte[1024];
                        stream.Read(challenge, 0, 4);

                        if (server.Password != null)
                        {
                            String password = server.Password;
                            server.Password = null;

                            //concateno pasword e challenge
                            byte[] passwordBytes = new byte[password.Length + 4];
                            Array.Copy(Encoding.ASCII.GetBytes(password), passwordBytes, password.Length);
                            Array.Copy(challenge, 0, passwordBytes, password.Length, 4);

                            //calcolo l'hash
                            SHA256 sha = SHA256Managed.Create();
                            byte[] hash = sha.ComputeHash(passwordBytes);

                            //invio nuovamente la richiesta di login
                            WriteMessage(stream, Encoding.ASCII.GetBytes(TipoComando.REQUEST_LOGIN), 0, TipoComando.REQUEST_LOGIN.Length);
                            WriteMessage(stream, hash, 0, hash.Length);
                            //invio hash
                            challengeMessage = new byte[1024];
                            ReadMessage(stream, challengeMessage, 0, 6);
                            messageString = Encoding.ASCII.GetString(challengeMessage, 0, 6);
                        }
                        else
                        {
                            //termino il tentativo di login
                            WriteMessage(stream, Encoding.ASCII.GetBytes(TipoComando.CLOSE_CONNECTION), 0, 6);
                            //Scateno l'evento di richiesta login
                            ServerEventArgs args = new ServerEventArgs() { Server = server, Position = -1 };
                            worker.ReportProgress(PASSWORD_REQUIRED, args);
                            CloseServer(server);
                            continue;
                        }
                    }

                    if (!messageString.Equals(TipoComando.LOGIN_OK))
                    {//connessione non effettuata o messaggio di risposta non valido
                        //chiudo connessioni aperte
                        CloseServer(server);
                        if (messageString.Equals(TipoComando.LOGIN_ERROR)){
                            ServerErrorEventsArgs args = new ServerErrorEventsArgs() { Server = server, Position = -1,ErrorCode = ServerErrorEventsArgs.PASSWORD_ERROR };
                            worker.ReportProgress(PASSWORD_ERROR, args);
                        }
                        continue;
                    }

                    //Ho ricevuto la conferma di login.

                    //Leggo i paramentri di configurazione
                    byte[] confByte = new byte[1024];
                    ReadMessage(stream, confByte, 0, 6);
                    String conf = Encoding.ASCII.GetString(confByte, 0, 6);

                    if (!conf.Equals(TipoComando.LOGIN_UDP_PORT))
                    {
                        Trace.TraceWarning("Ricevuto un messaggio errato in connectServerWorker_DoWork(). Messaggio:{0}.", conf);
                        //chiudo connessioni aperte
                        ServerErrorEventsArgs args = new ServerErrorEventsArgs() { Server = server, Position = -1, ErrorCode = ServerErrorEventsArgs.LOGIN_ERROR };
                        EventHandler<ServerErrorEventsArgs> handler = ServerError;
                        if (handler != null)
                        {
                            handler(this, args);
                        }
                        CloseServer(server);
                        continue;
                    }

                    ParameterLogin(ref stream, ref server);
                    serverToConnect.Enqueue(server);
                    Trace.TraceInformation("Server connesso. Server: {0}:{1}:{2}", server.Name, server.IP, server.ControlPort);
                    worker.ReportProgress(serverToConnect.Count);
                }
                catch (NetworkException)
                {
                    Trace.TraceError("NetworkException in connectServerWorker_DoWork().");
                    //inizializzo l'evento da inviare
                    ServerErrorEventsArgs args = new ServerErrorEventsArgs()
                    {
                        Server = server,
                        Position = -1,
                        ErrorCode = ServerErrorEventsArgs.NETWORK_ERROR
                    };
                    worker.ReportProgress(ERROR, args);
                    CloseServer(server);

                }
                catch (OperationCanceledException)
                {
                    continue;
                }
                catch (Exception se)
                {
                    if (se is SocketException || se is IOException)
                    {
                        //inizializzo l'evento da inviare
                        ServerErrorEventsArgs args = new ServerErrorEventsArgs()
                        {
                            Server = server,
                            Position = -1,
                            ErrorCode = ServerErrorEventsArgs.CONNECTION_ERROR
                        };
                        worker.ReportProgress(ERROR, args);
                        CloseServer(server);
                    }
                    else
                    {
                        ServerErrorEventsArgs args = new ServerErrorEventsArgs()
                        {
                            Server = server,
                            Position = -1,
                            ErrorCode = ServerErrorEventsArgs.CONNECTION_ERROR
                        };
                        worker.ReportProgress(ERROR, args);
                        CloseServer(server);
                    }
                    Trace.TraceError("Exception in riceviInfoServerWorker_DoWork(). Stack trace:\n{0}.", se.StackTrace);
                }

            }
        }
 internal void DeactiveCompleted(ServerConnection serverConnection)
 {
     //inizializzo l'evento
     ServerEventArgs args = new ServerEventArgs()
     {
         Server = serverConnection.Server,
         Position = serverAttivoIndex
     };
     EventHandler<ServerEventArgs> handler = ServerDeactivated;
     if (handler != null)
     {
         handler(this, args);
     }
     //posso attivare il server su cui ho fatto switch che
     //l'ho salvato nella variabile serverToActiveIndex
     //quando ho chiamato il metodo IConnection.Active
     ServerConnection serverToActive = serverConnessi[serverToActiveIndex];
     Trace.TraceInformation("Server non attivo. Server: {0}:{1}:{2}", serverConnection.Server.Name, serverConnection.Server.IP, serverConnection.Server.ControlPort);
     setActive(serverToActive);
 }
 internal void ClosedByServer(ServerConnection serverConnection)
 {
     ServerEventArgs args = null;
     int position = -1;
     position = serverConnessi.IndexOf(serverConnection);
     //inizializzo l'evento da inviare
     args = new ServerEventArgs()
     {
         Server = serverConnection.Server,
         Position = position,
     };
     serverConnessi.Remove(serverConnection);
     if (serverConnessi.Count == 0)
     {
         started = false;
         serverAttivoIndex = -1;
     }
     EventHandler<ServerEventArgs> handler = ServerDisconnected;
     if (handler != null)
     {
         handler(this, args);
     }
     EventArgs argsRefresh = new EventArgs();
     EventHandler<EventArgs> handlerRefresh = RefreshConnections;
     if (handlerRefresh != null)
     {
         handlerRefresh(this, argsRefresh);
     }
     if (serverAttivoIndex == position && started)
     {
         ServerConnection serverToActive = serverConnessi[0];
         setActive(serverToActive);
     }
     else if (position < serverAttivoIndex)
     {//Perché nella lista potrebbe precederlo
         serverAttivoIndex--;
     }
 }
 internal void Closed(ServerConnection serverConnection)
 {
     ServerEventArgs args = null;
     //inizializzo l'evento da inviare
     args = new ServerEventArgs()
     {
         Server = serverConnection.Server,
         Position = serverConnessi.IndexOf(serverConnection),
     };
     serverConnessi.Remove(serverConnection);
     if (serverConnessi.Count == 0)
     {
         started = false;
         serverAttivoIndex = -1;
     }
     EventHandler<ServerEventArgs> handler = ServerDisconnected;
     if (handler != null)
     {
         handler(this, args);
     }
     EventArgs argsRefresh = new EventArgs();
     EventHandler<EventArgs> handlerRefresh = RefreshConnections;
     if (handlerRefresh != null)
     {
         handlerRefresh(this, argsRefresh);
     }
 }