SND\AstrorEnales_cp d17743ef3a - Some smaller Refactorings in Metro systems
- Added a bunch of Basic TypeWriters to the ContentPipeline
2012-08-14 13:07:24 +00:00

123 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using ANX.Framework.NonXNA.Windows8;
// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license
namespace ANX.Framework.NonXNA.Reflection
{
/// <summary>
/// The AssemblyListFile is a data holder of all available assembly names.
/// This is necessary cause on some platforms we can't get all the *.dll files
/// in the current directory. So we simply load this file from the
/// content/assets/etc. and call Assembly.Load with the names.
/// </summary>
internal class AssemblyListFile
{
#region Constants
private const string Filename = "AssemblyList.bin";
#endregion
#region Private
private List<string> allAssemblyNames;
#endregion
#region Constructor
public AssemblyListFile()
{
allAssemblyNames = new List<string>();
}
#endregion
#region GetAllAssemblyNames
public string[] GetAllAssemblyNames()
{
return allAssemblyNames.ToArray();
}
#endregion
#region SetAllAssemblyNames
public void SetAllAssemblyNames(Assembly[] assemblies)
{
allAssemblyNames.Clear();
foreach (Assembly assembly in assemblies)
{
allAssemblyNames.Add(assembly.FullName);
}
}
#endregion
#region Load
public void Load()
{
Stream assemblyListStream = null;
#if WINDOWSMETRO
assemblyListStream = LoadStreamFromMetroAssets();
#endif
if (assemblyListStream != null)
{
LoadFromStream(assemblyListStream);
}
}
#endregion
#region LoadStreamFromMetroAssets
#if WINDOWSMETRO
private Stream LoadStreamFromMetroAssets()
{
Stream result = AssetsHelper.LoadStreamFromAssets("Assets\\" + Filename);
if(result == null)
{
result = new MemoryStream();
BinaryWriter writer = new BinaryWriter(result);
writer.Write(5);
writer.Write("ANX.PlatformSystem.Metro");
writer.Write("ANX.RenderSystem.Windows.Metro");
writer.Write("ANX.InputSystem.Standard");
writer.Write("ANX.MediaSystem.Windows.OpenAL");
writer.Write("ANX.SoundSystem.Windows.XAudio");
result.Position = 0;
}
return result;
}
#endif
#endregion
#region LoadFromStream
private void LoadFromStream(Stream stream)
{
BinaryReader reader = new BinaryReader(stream);
int numberOfAssemblyNames = reader.ReadInt32();
for (int assemblyIndex = 0; assemblyIndex < numberOfAssemblyNames;
assemblyIndex++)
{
allAssemblyNames.Add(reader.ReadString());
}
}
#endregion
#region Save
public void Save(Stream stream)
{
BinaryWriter writer = new BinaryWriter(stream);
writer.Write(allAssemblyNames.Count);
foreach (string assemblyName in allAssemblyNames)
{
writer.Write(assemblyName);
}
}
#endregion
}
}