public IEnumerable<object> Run(BuildInstance instance, IEnumerable<object> inputs)
{
// parse the material as XML
var stream = inputs.First() as Stream;
if (stream == null)
{
instance.Log(LogLevel.Error, "Inputs to TestParser must be a single Stream object.");
return null;
}
var document = XDocument.Load(stream);
var root = document.Element("Test");
if (root == null)
{
instance.Log(LogLevel.Error, "Test file must start with a <Test> node.");
return null;
}
string data = null;
var dataElement = root.Element("Data");
if (dataElement != null)
data = dataElement.Value;
// example of finding all "dependencies" of this asset and kicking off builds for them
var dependencies = root.Element("Dependencies");
if (dependencies != null)
{
foreach (var element in dependencies.Elements())
instance.Start((string)element.Attribute("Name"));
}
// example of a "temporary" build, one that you can embed the results into this asset
var embed = (string)root.Attribute("Embed");
string embeddedData = null;
if (embed != null)
{
var tempBuild = instance.StartTemp(embed);
if (tempBuild == null) // some error ocurred while trying to build it
return null;
var tempStream = tempBuild.Results.First() as Stream;
embeddedData = string.Concat(ToByteArray(tempStream));
}
var output = new MemoryStream();
var writer = new StreamWriter(output) { AutoFlush = true };
writer.WriteLine("This is my asset data! Woohoo!");
if (data != null)
writer.WriteLine(data);
if (embeddedData != null)
writer.WriteLine("Some embedded data: " + embeddedData);
return new[] { output };
}