Glatzemann 933ef7cae6 - extended ContentPipeline ProcessorManager with method to select a default processor for a importer or imported type
- extended ContentImporter to provide OutputType of imported content
- provided a list of available ContentProcessors in current context

PlatformSystems are no longer AddIns. This doesn't mean, that you can't load them dynamically. The handling is just different. There's only a single PlatformSystem available for each platform ANX runs on. This one is auto loaded. If it doesn't exist the game doesn't run. The reason for this is, that we will move the AddIn system from ANX.Framework to the specialized PlatformSystem. This is necessary because we want ANX.Framework to become platform independent. The AddIn system is different for some platforms (Android, iOS, Windows 8 Metro) and needs to be specialized. On the other hand we are able to simplify the AddIn system when moving it to the PlatformSystem because we don't need a big AddIn system supporting all platforms with much conditional compiling.

THIS COMMIT DOES BREAK SOME FUNCTIONALITY. METRO DOESN'T WORK ANYMORE, AS IT IS NOT TESTED. DON'T USE THIS COMMIT IF YOU ARE NO ANX.FRAMEWORK DEVELOPER. We will catch up soon with a tested and working version.
2015-03-15 01:10:54 +01:00

178 lines
4.7 KiB
C#

using System;
using System.IO;
using ANX.Framework.NonXNA;
using ANX.Framework.NonXNA.PlatformSystem;
// 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.Storage
{
public sealed class StorageDevice
{
#region Private
private INativeStorageDevice nativeImplementation;
private static Func<PlayerIndex, int, int, StorageDevice> openDeviceDelegate = null;
private Func<string, StorageContainer> openContainerDelegate = null;
#endregion
#region Public
#pragma warning disable 0067 //This event is never used
public static event EventHandler<EventArgs> DeviceChanged;
#pragma warning restore 0067
public long FreeSpace
{
get
{
return nativeImplementation.FreeSpace;
}
}
public bool IsConnected
{
get
{
return nativeImplementation.IsConnected;
}
}
public long TotalSpace
{
get
{
return nativeImplementation.TotalSpace;
}
}
internal string StoragePath
{
get;
private set;
}
internal PlayerIndex PlayerIndex
{
get;
private set;
}
#endregion
#region Constructor
internal StorageDevice(PlayerIndex player, int sizeInBytes, int directoryCount)
{
nativeImplementation = PlatformSystem.Instance.CreateStorageDevice(this, player, sizeInBytes, directoryCount);
}
#endregion
#region BeginOpenContainer
public IAsyncResult BeginOpenContainer(string displayName,
AsyncCallback callback, Object state)
{
if (openContainerDelegate != null)
throw new InvalidOperationException(
"There is currently a StorageContainer request pending. " +
"Please let this request finish.");
openContainerDelegate = OpenStorageContainer;
return openContainerDelegate.BeginInvoke(displayName, callback, state);
}
#endregion
#region BeginShowSelector
public static IAsyncResult BeginShowSelector(AsyncCallback callback, Object state)
{
return BeginShowSelector(PlayerIndex.One, 0, 0, callback, state);
}
#endregion
#region BeginShowSelector
public static IAsyncResult BeginShowSelector(int sizeInBytes, int directoryCount,
AsyncCallback callback, Object state)
{
return BeginShowSelector(PlayerIndex.One, sizeInBytes, directoryCount,
callback, state);
}
#endregion
#region BeginShowSelector
public static IAsyncResult BeginShowSelector(PlayerIndex player,
AsyncCallback callback, Object state)
{
return BeginShowSelector(player, 0, 0, callback, state);
}
#endregion
#region BeginShowSelector
public static IAsyncResult BeginShowSelector(PlayerIndex player,
int sizeInBytes, int directoryCount, AsyncCallback callback, Object state)
{
if (openDeviceDelegate != null)
throw new InvalidOperationException("There is currently a StorageDevice request pending. Please let this request finish.");
openDeviceDelegate = OpenStorageDevice;
return openDeviceDelegate.BeginInvoke(player, sizeInBytes, directoryCount,
callback, state);
}
#endregion
#region DeleteContainer
public void DeleteContainer(string titleName)
{
if (String.IsNullOrEmpty(titleName))
throw new ArgumentNullException("titleName");
try
{
nativeImplementation.DeleteContainer(titleName);
}
catch (IOException e)
{
throw new InvalidOperationException("A IOException occured while deleting the container. See inner Exception.", e);
}
}
#endregion
#region EndOpenContainer
public StorageContainer EndOpenContainer(IAsyncResult result)
{
if (openContainerDelegate == null)
throw new InvalidOperationException("There is operation pending that could be ended.");
StorageContainer container = openContainerDelegate.EndInvoke(result);
openContainerDelegate = null;
return container;
}
#endregion
#region EndShowSelector
public static StorageDevice EndShowSelector(IAsyncResult result)
{
if (openDeviceDelegate == null)
throw new InvalidOperationException("There is operation pending that could be ended.");
StorageDevice device = openDeviceDelegate.EndInvoke(result);
openDeviceDelegate = null;
return device;
}
#endregion
#region OpenStorageDevice
private static StorageDevice OpenStorageDevice(PlayerIndex player,
int sizeInBytes, int directoryCount)
{
return new StorageDevice(player, sizeInBytes, directoryCount);
}
#endregion
#region OpenStorageContainer
private StorageContainer OpenStorageContainer(string displayName)
{
return new StorageContainer(this, PlayerIndex, displayName);
}
#endregion
}
}