Пример #1
0
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            if (!paint)
            {
                return;
            }

            try
            {
                e.Graphics.DrawImage(partieActuelle.Jeu.Map.Fond, partieActuelle.AireJeu.Rect);                 // repeint la grille

                partieActuelle.Jeu.DessinePieces(e.Graphics);
            }
            catch (Exception exception)
            {
                Catcher.LogError(exception.Message);
            }
        }
Пример #2
0
        /**
         * <summary>Se connecte à un serveur</summary>
         * <param name="serveur">Informations du serveur auquel se connecter</param>
         */
        public async Task <bool> ConnectAsync(IPEndPoint serveur)
        {
            try
            {
                await _client.ConnectAsync(serveur.Address, serveur.Port);

                _flux = _client.GetStream();
                Catcher.LogInfo($@"Connecté au serveur TCP {serveur.Address}:{serveur.Port}");

                return(true);
            }
            catch (Exception e)
            {
                Catcher.LogError($@"Impossible de se connecter au serveur TCP {e.Message}");

                return(false);
            }
        }
Пример #3
0
        /**
         * <summary>Ouvre un port à partir d'un port de base</summary>
         * <param name="startPort">Numéro du port de base</param>
         */
        private void OpenPort(int startPort)
        {
            int  tentatives = -1;
            bool connected  = false;

            while (tentatives < 5 && connected == false)
            {
                try
                {
                    tentatives++;
                    _udp       = new UdpClient(startPort + tentatives);
                    connected  = true;
                    startPort += tentatives;
                }
                catch (Exception e)
                {
                    Catcher.LogError(@"Impossible d'ouvrir un socket UDP " + e.Message);
                }
            }
        }
Пример #4
0
        private async void buttonClient_Click(object sender, EventArgs e)
        {
            StateButton(false);

            try
            {
                _clientBroadcastServer = new Broadcast(new Udp(32530));

                Udp udp   = new Udp(32430);
                var model = GetInitModel(udp.Token);

                _clientBroadcastServer.LaunchBroadcast(model, 32430);                 // lance le broadcast sur les serveurs

                await _clientBroadcastServer.ReceiveBroadCastAsync(AddItem);          // écoute les réponses
            }
            catch (Exception exception)
            {
                Catcher.LogError(exception.Message);
                StateButton(true);
            }
        }
Пример #5
0
        /**
         * <summary>Lance l'écoute sur le serveur</summary>
         * <returns>Les données wrappées dans le model T demandé, null si une erreur</returns>
         */
        protected async Task <T> ReceiveAsync <T>(NetworkStream flux) where T : class, IModelReseau
        {
            T data = null;

            try
            {
                await Task.Run(() =>
                {
                    Catcher.LogInfo("En attente d'un message...");

                    byte[] buffer = new byte[1024];
                    using (MemoryStream ms = new MemoryStream())
                    {
                        int numBytesRead = flux.Read(buffer, 0, buffer.Length);
                        while (flux.DataAvailable || numBytesRead > 0)
                        {
                            if (numBytesRead == 0)
                            {
                                numBytesRead = flux.Read(buffer, 0, buffer.Length);
                            }

                            Catcher.LogInfo($"Réception de {numBytesRead} bytes");

                            ms.Write(buffer, 0, numBytesRead);
                            numBytesRead = 0;
                        }

                        data = Serialise.MemoryStreamToObject <T>(ms);                        // converti les octets en un model demandé

                        Catcher.LogInfo($"Message de longueur {ms.ToArray().Length} reçu");
                    }
                });
            }
            catch (Exception e)
            {
                Catcher.LogError(@"Impossible de recevoir un message TCP : " + e.Message);
            }

            return(data);
        }
Пример #6
0
        /**
         * <summary>Envoie un model au client</summary>
         * <param name="data">Model qui implémente <see cref="IModelReseau"/> à envoyer</param>
         * <param name="flux">Flux <see cref="NetworkStream"/> à envoyer</param>
         * <returns>true si tout s'est bien passé, false sinon</returns>
         */
        protected virtual async Task <bool> SendAsync(IModelReseau data, NetworkStream flux)
        {
            try
            {
                await Task.Run(() =>
                {
                    BinaryWriter binaryWriter = new BinaryWriter(flux);                     // converti le flux en binaire

                    byte[] byteData = Serialise.ObjectToByteArray(data);

                    binaryWriter.Write(byteData);                     // envoie le model sous forme de bytes[]

                    Catcher.LogInfo($"Message de longueur {byteData.Length} envoyé");
                });

                return(true);
            }

            catch (Exception e)
            {
                Catcher.LogError(@"Impossible d'envoyer un message TCP : " + e.Message);
                return(false);
            }
        }
Пример #7
0
        /**
         * <summary>Démarre le serveur</summary>
         * <param name="config">Configuration du serveur dans un <see cref="IPEndPoint"/></param>
         * <returns>true si la connexion a pu s'effectuer, false sinon</returns>
         */
        public async Task <bool> ListenAsync(IPEndPoint config)
        {
            _serveur = new TcpListener(config);

            try
            {
                await Task.Run(() =>
                {
                    _serveur.Start();
                    _client = _serveur.AcceptTcpClient();                     // accepte une connexion client
                    _flux   = _client.GetStream();
                });

                Catcher.LogInfo("Serveur TCP démarré");

                return(true);
            }
            catch (Exception e)
            {
                Catcher.LogError(@"Impossible de démarrer le serveur TCP " + e.Message);

                return(false);
            }
        }