/// <summary>
        /// Write length + byte[]
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="buffer"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        internal static async Task WriteAsync(this Stream stream, byte[] buffer, SizeLength length)
        {
            byte[] bytesLength;
            switch (length)
            {
            case SizeLength.BYTE:
                bytesLength = new byte[] { (byte)buffer.Length };
                break;

            case SizeLength.SHORT:
                bytesLength = BitConverter.GetBytes((Int16)buffer.Length);
                break;

            case SizeLength.INT:
                bytesLength = BitConverter.GetBytes(buffer.Length);
                break;

            case SizeLength.LONG:
                bytesLength = BitConverter.GetBytes(buffer.LongLength);
                break;

            default:
                throw new InvalidCastException("Can´t find match for length: " + length.ToString());
            }

            await stream.WriteAsync(bytesLength);

            await stream.WriteAsync(buffer);
        }