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); } }
/** * <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); } }
/** * <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); } } }
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); } }
/** * <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); }
/** * <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); } }
/** * <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); } }