public void SendPacket(BlendFarmMessage message)
        {
            Type t = message.GetType();
            BlendFarmHeaderAttribute attr = t.GetCustomAttribute <BlendFarmHeaderAttribute>();

            if (attr != null && BlendFarmMessage.HasPackageType(attr.Header))
            {
                string paddedHeader = attr.Header.PadRight(MAX_HEADER_SIZE, '_');
                byte[] header       = Encoding.UTF8.GetBytes(paddedHeader);

                if (header.Length != MAX_HEADER_SIZE)
                {
                    throw new ArgumentException($"Header cannot be more than {MAX_HEADER_SIZE} characters long, Was {header.Length}");
                }

                byte[] body = null;
                try
                {
                    body = BinaryParser.Serialize(message);
                }
                catch (Exception ex)
                {
                    throw new InvalidDataException($"Failed to serialize {t.Name}");
                }

                byte[] size = BinaryParser.Serialize(body.Length);

                Send((str) =>
                {
                    str.Write(header, 0, MAX_HEADER_SIZE);
                    str.Write(size, 0, 4);
                    str.Write(body, 0, body.Length);
                });
            }
        }
        public static string GetPackageName(Type type)
        {
            BlendFarmHeaderAttribute header = type.GetCustomAttribute <BlendFarmHeaderAttribute>();

            if (header == null)
            {
                return(null);
            }
            return(header.Header);
        }