public PacketHandler(byte[] _packet)
        {
            // try handler packet
            if (!handlerPacket(_packet))
            {
                invalidData = "";
                for (int i = 0; i < _packet.Length; i++)
                    invalidData += _packet[i] + " ";

                _format = new PacketFormat("???");
                _packet = new byte[] { };
            }
        }
        private void Creator(PacketFormat format, byte[] data)
        {
            // create format
            byte[] packetFormat = formatingPacket(format.getByteArrayFormat);

            // create data
            byte[] packetData = formatingPacket(data);

            // setting length of packet
            _data = new byte[packetFormat.Length + packetData.Length];

            // copy format to packet
            Array.Copy(packetFormat, _data, packetFormat.Length);

            // copy data to packet
            Array.Copy(packetData, 0, _data, packetFormat.Length, packetData.Length);
        }
 /// <summary>
 /// Create data formated with a format
 /// </summary>
 /// <param name="format">DarkKnight.Data.PacketFormat object</param>
 /// <param name="data">array of bytes data</param>
 public PacketCreator(PacketFormat format, byte[] data)
 {
     Creator(format, data);
 }
        /// <summary>
        /// Here we filter the received packet in bytes to turn into a readable package for the Packet class.
        /// We took the package format and also took the given package.
        /// </summary>
        /// <returns>true if packet is handled with success</returns>
        private bool handlerPacket(byte[] packet)
        {
            int lengthFormat = 0;
            int lengthFormatPosition = 0;

            do
            {
                lengthFormat += packet[lengthFormatPosition];
                lengthFormatPosition++;
                if (lengthFormatPosition >= packet.Length || lengthFormat > packet.Length)
                    return false;

            } while (packet[lengthFormatPosition] > 0);

            int lengthData = 0;
            int lengthDataPosition = lengthFormat + lengthFormatPosition + 1;

            if (lengthDataPosition >= packet.Length)
                return false;

            do
            {
                lengthData += packet[lengthDataPosition];
                lengthDataPosition++;
                if (lengthDataPosition >= packet.Length || lengthData > packet.Length)
                    return false;

            } while (packet[lengthDataPosition] > 0);


            int lengthDataLengthInformation = lengthDataPosition - (lengthFormat + lengthFormatPosition + 1);
            int totalDataLength = lengthData + lengthFormat + lengthFormatPosition + lengthDataLengthInformation + 2;

            if (packet.Length < totalDataLength)
                return false;

            try
            {
                byte[] format = new byte[lengthFormat];
                _packet = new byte[lengthData];

                Array.Copy(packet, lengthFormatPosition + 1, format, 0, lengthFormat);
                Array.Copy(packet, lengthDataPosition + 1, _packet, 0, lengthData);

                _format = new PacketFormat(Encoding.UTF8.GetString(format));

                packetHandled.Add((Packet)this.MemberwiseClone());

                if (packet.Length == totalDataLength)
                    return true;

                byte[] morePacket = new byte[packet.Length - totalDataLength];
                Array.Copy(packet, totalDataLength, morePacket, 0, packet.Length - totalDataLength);

                return handlerPacket(morePacket);
            }
            catch
            {
                return false;
            }
        }
 /// <summary>
 /// Send a array of bytes 8-bits mapped with format to the server
 /// </summary>
 /// <param name="format">DarkKnight.client.PacketFormat object</param>
 /// <param name="toSend">the int to send</param>
 public void Send(PacketFormat format, byte[] toSend)
 {
     SendPacket(new PacketCreator(format, toSend));
 }
 /// <summary>
 /// Send a mapped with format to the server
 /// </summary>
 /// <param name="format">DarkKnight.client.PacketFormat object</param>
 public void Send(PacketFormat format)
 {
     Send(format, new byte[] { });
 }
 /// <summary>
 ///  Send a UTF8 String mapped with format to the server
 /// </summary>
 /// <param name="format">DarkKnight.client.PacketFormat object</param>
 /// <param name="toSend">the string to send</param>
 public void Send(PacketFormat format, string toSend)
 {
     Send(format, Encoding.UTF8.GetBytes(toSend));
 }