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