From 64b58a98da625ebf74b621ee131ca9f4cf9a3f41 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?ZIMMERL=C3=89=20Nathan?= <nzimmerle@ad.unistra.fr>
Date: Tue, 29 Nov 2016 12:02:14 +0100
Subject: [PATCH] =?UTF-8?q?Classe=20ChatMessage=20avec=20une=20taille=20d'?=
 =?UTF-8?q?en=20t=C3=AAte=20d=C3=A9finie?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Chat/serveurUdp/serveurUdp/ChatMessage.cs | 73 +++++++++++++++++++++++
 1 file changed, 73 insertions(+)
 create mode 100644 Chat/serveurUdp/serveurUdp/ChatMessage.cs

diff --git a/Chat/serveurUdp/serveurUdp/ChatMessage.cs b/Chat/serveurUdp/serveurUdp/ChatMessage.cs
new file mode 100644
index 0000000..27f548b
--- /dev/null
+++ b/Chat/serveurUdp/serveurUdp/ChatMessage.cs
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace ClientUdp
+{
+    public enum Commande
+    {
+        POST, GET, HELP, QUIT, STOPSERVEUR, SUBSCRIBE, SUBSCRIBEv2, UNSUBSCRIBE
+    };
+
+    public enum CommandeType { REQUETE, REPONSE };
+
+    class ChatMessage
+    {
+        public const int bufferSize = 1500;
+        public const int headerSize = 35;
+
+        public Commande commande;               // commande
+        public CommandeType commandeType;       // type (Requête/Réponse)
+        public int dataSize;                    // taille de la donnée
+        public String data;                     // données de la commande
+        public String pseudo;                   // pseudo de l'envoyeur 
+
+        public ChatMessage(Commande commande, CommandeType type, String data, String pseudo)
+        {
+            this.commande = commande;
+            this.commandeType = type;
+            this.dataSize = data.Length;
+            this.data = data;
+            this.pseudo = pseudo;
+        }
+
+        public ChatMessage(byte[] buffer)
+        {
+            commande = (Commande)buffer[0];
+            commandeType = (CommandeType)buffer[1];
+            pseudo = Encoding.ASCII.GetString(buffer, 2, 30).TrimEnd(new char[] { '\0' });
+            dataSize = BitConverter.ToInt32(buffer, 32);
+            data = Encoding.ASCII.GetString(buffer, 36, dataSize);
+        }
+
+        public byte[] GetBytes()
+        {
+            byte[] buffer = new byte[bufferSize];                           // Déclaration du buffer
+
+            buffer[0] = (byte)commande;                                     // Commande
+            buffer[1] = (byte)commandeType;                                 // Type de la commande
+            Encoding.ASCII.GetBytes(pseudo, 0, pseudo.Length, buffer, 2);   // Pseudo à 30 bits
+            byte[] intBuf = BitConverter.GetBytes(dataSize);                // Taille de la data
+            buffer[32] = intBuf[0];                                         // Int stocké sur 4bits
+            buffer[33] = intBuf[1];
+            buffer[34] = intBuf[2];
+            buffer[35] = intBuf[3];
+            Encoding.ASCII.GetBytes(data, 0, data.Length, buffer, 36);      // Data
+
+            return buffer;
+        }
+
+        public static byte[] GetBytes(Commande commande, CommandeType type, String data, String pseudo)
+        {
+            ChatMessage chatCommande = new ChatMessage(commande, type, data, pseudo);
+            return chatCommande.GetBytes();
+        }
+
+        public override string ToString()
+        {
+            return "[" + commande + "," + commandeType + ",\"" + pseudo + "\"," + dataSize + ",\"" + data + "\"]";
+        }
+
+    }
+}
-- 
GitLab