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); }
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); } }
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"]; }
void connection_ServerFound(object sender, args.ServerEventArgs e) { Console.WriteLine("server aggiunto"); Server server = e.Server; if (!serverTrovati.Contains(e.Server)) { serverTrovati.Add(server); } }
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"]; }
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); } }
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); } }