コード例 #1
0
        // 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();
            }
        }
コード例 #2
0
ファイル: client.cs プロジェクト: uestclx/C-for-3A-F2B-205
        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");
        }
コード例 #3
0
        // 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;
            }
        }
コード例 #4
0
 // 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    = "";
 }