// fonction qui va être appelé lorsque l'utilisateur clique le bouton login private void Login_Click(object sender, RoutedEventArgs e) { // utiliser l'expression régulière pour vérifier la validité du numéro de port Regex rgxPort = new Regex(@"^[\d]+$"); if (!rgxPort.IsMatch(PortBox.Text)) { MessageBox.Show("Port number not validate, it should be a digit or digits", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning); return; } int port = Int32.Parse(PortBox.Text); pseudo = PseudoBox.Text; // utiliser une expression régulière pour vérifier la validité du pseudonyme Regex rgxPseudo = new Regex(@"^[a-zA-Z][\w]*$"); if (!rgxPseudo.IsMatch(pseudo)) { MessageBox.Show("Pseudo name not validate, it should longer thant one and begin with a alphabet", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning); return; } string ip = IPBox.Text; // Adresse par défaut "tcp://localhost:12345/Serveur" LeRemot = (RemotingInterface.IRemotChaine)Activator.GetObject( typeof(RemotingInterface.IRemotChaine), $"tcp://{ip}:{port}/Serveur"); // attraper une erreur de connexion try { // récuperer le horlge logique dépuis le serveur, s'il y une erreur de connexion, // une erreur de type System.Net.Sockets.SocketException va se poser logicTime = LeRemot.clientLogin(pseudo); } // lorsque l'erreur de connexion se produit, demandez à l'utilisateur de se reconnecter catch (System.Net.Sockets.SocketException err) { MessageBox.Show("Error connecting the remote server, please choose another combination of port and address", "Error", MessageBoxButton.OK, MessageBoxImage.Error); Console.WriteLine("{0} Exception caught.", err); return; } // gérer l'erreur de duplication du nom d'utilisateur if (logicTime == -1) { // Debug.WriteLine("logicTime {0}", logicTime); MessageBox.Show("The current pseudo is not available, please choose another Pesedo", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } else { PortBox.IsEnabled = false; PseudoBox.IsEnabled = false; IPBox.IsEnabled = false; // démarrer le thread pour obtenir des mises à jour du serveur Client_Logined(); } }
public Form1() { InitializeComponent(); // création d'un canal recepteur TCP TcpChannel canal = new TcpChannel(); // enregistrement du canal ChannelServices.RegisterChannel(canal); // l'ojet LeRemot récupére ici la référence de l'objet du serveur // on donne l'URI (serveur, port, classe du serveur) et le nom de l'interface LeRemot = (RemotingInterface.IRemotChaine)Activator.GetObject( typeof(RemotingInterface.IRemotChaine), "tcp://localhost:12345/Serveur"); }
// fonction qui va être appelé lorsque l'utilisateur clique le croix rouge private void Window_Closing(object sender, CancelEventArgs e) { MessageBoxResult result = MessageBox.Show("Do you really want quit?", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { if (LeRemot != null) { LeRemot.clientLogout(pseudo); LeRemot = null; } } else { e.Cancel = true; } }
// fonction qui va être appelé lorsque l'utilisateur clique le bouton logout private void Logout_Click(object sender, RoutedEventArgs e) { // arrêter le thread th.Abort(); // envoyer un message de type logout au serveur LeRemot.clientLogout(pseudo); // annuler la connections entre le client et le serveur LeRemot = null; // re-initialiser la liste listMembers listMembers = new LinkedList <string>(); // mise à jour la listView également convertToListView(listMembers); // initialize UI component status Send.IsEnabled = false; Logout.IsEnabled = false; Login.IsEnabled = true; PortBox.IsEnabled = true; PseudoBox.IsEnabled = true; IPBox.IsEnabled = true; ChatHistory.Text = ""; }