From 2acfa34596061a9236bb6a9df1e3f3a0c01d6ff0 Mon Sep 17 00:00:00 2001 From: RogueAI42 Date: Tue, 13 Jun 2017 20:06:38 +1000 Subject: Python API It uses a meta-language and a CSharpCodeProvider on startup. I will release a tutorial on the forums soon showing how to use it. This commit also adds an extremely basic loading screen which shows while Desktop is getting everything ready. Which can take a while if you have any Python mods. Thanks, IronPython. --- ShiftOS_TheReturn/ReflectMan.cs | 45 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) (limited to 'ShiftOS_TheReturn/ReflectMan.cs') diff --git a/ShiftOS_TheReturn/ReflectMan.cs b/ShiftOS_TheReturn/ReflectMan.cs index a0ead60..78f6bf3 100644 --- a/ShiftOS_TheReturn/ReflectMan.cs +++ b/ShiftOS_TheReturn/ReflectMan.cs @@ -22,6 +22,7 @@ * SOFTWARE. */ +using Microsoft.Scripting.Hosting; using System; using System.Collections.Generic; using System.Linq; @@ -31,34 +32,46 @@ using System.Threading.Tasks; namespace ShiftOS.Engine { + /// + /// Mirror, mirror on the wall. Manages a list of types found in ShiftOS-related assemblies. + /// public static class ReflectMan { private static Assembly[] asms = null; + /// + /// The list of found assemblies. + /// public static Assembly[] Asms { get { if (asms == null) - LoadAssemblies(); + LoadFiles(); return asms; } } private static Type[] types = null; + /// + /// The list of found types. + /// public static Type[] Types { get { if (types == null) + { FindTypes(); + PythonAPI.Scan(); + } return types; } } - private static void LoadAssemblies() + private static void LoadFiles() { var ret = new List(); - foreach (var exe in Array.FindAll(System.IO.Directory.GetFiles(Environment.CurrentDirectory), n => n.EndsWith(".exe") || n.EndsWith(".dll"))) + foreach (var exe in Array.FindAll(System.IO.Directory.GetFiles(Environment.CurrentDirectory), n => n.EndsWith(".exe", true, null) || n.EndsWith(".dll", true, null))) try { var asm = Assembly.LoadFile(exe); @@ -76,5 +89,31 @@ namespace ShiftOS.Engine ret.AddRange(asm.GetTypes()); types = ret.ToArray(); } + + /// + /// Add extra types to the ReflectMan array after the scan is complete. + /// Shouldn't be public, but C# doesn't support "friend". + /// + /// An array of types to append. + public static void AddTypes(Type[] newtypes) + { + var oldlength = types.Length; + Array.Resize(ref types, oldlength + newtypes.Length); + newtypes.CopyTo(types, oldlength); + } + } + +#if DEBUG + [Namespace("dev")] + public static class ReflectDebug + { + [Command("listalltypes", description = "List all types that were found by ReflectMan. Only present in DEBUG builds of ShiftOS.")] + public static bool ListAllTypes(Dictionary args) + { + foreach (var type in ReflectMan.Types) + Console.WriteLine(type.ToString()); + return true; + } } +#endif } -- cgit v1.2.3