using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Reflection; using System.Threading.Tasks; using Barotrauma.LuaCs.Data; using FluentResults; using MoonSharp.Interpreter; using MoonSharp.Interpreter.Interop; namespace Barotrauma.LuaCs.Services; public interface ILuaScriptManagementService : IReusableService { #region Script_Ops Result GetGlobalTableValue(string tableName); /// /// Parses and loads script sources (code) into a memory cache without executing it. /// /// /// // [Required] Task LoadScriptResourcesAsync(ImmutableArray resourcesInfo); /// /// Executes cached scripts (code) for the given . /// /// /// // [Required] FluentResults.Result ExecuteLoadedScriptsForPackage(ContentPackage package); /// /// Executes cached scripts (code) for the given collection . /// /// /// // [Required] FluentResults.Result ExecuteLoadedScriptsForPackages(IEnumerable packages); /// /// /// /// // [Required] FluentResults.Result ExecuteLoadedScripts(); /// /// /// /// /// // [Required] FluentResults.Result DisposePackageResources(ContentPackage package); /// /// Calls dispose on, and clears active refs for, currently running scripts. Does not clear caches. /// /// FluentResults.Result UnloadActiveScripts(); /// /// Unloads all scripts and clears all caches/references. /// /// /// May be functionally equivalent to FluentResults.Result DisposeAllPackageResources(); #endregion #region Type_Registration IUserDataDescriptor RegisterType(Type type); /// /// [Deprecated]
/// Use () instead. /// Gets the type information for an already registered type. ///
/// The fully qualified name of the type and namespace. /// The for the type, if registered. Null if none is found. [Obsolete($"Use {nameof(GetTypeInfo)} instead.")] IUserDataDescriptor RegisterType(string typeName) => GetTypeInfo(typeName); IUserDataDescriptor RegisterGenericType(Type type); /// /// [Deprecated]
/// Use () instead. /// Gets the generic type information for an already registered type. ///
/// The fully qualified name of the generic type and namespace. /// The fully qualified name of the template types. /// The for the type, if registered. Null if none is found. [Obsolete($"Use {nameof(GetGenericTypeInfo)} instead.")] IUserDataDescriptor RegisterGenericType(string typeName, params string[] typeNameArgs) => GetGenericTypeInfo(typeName, typeNameArgs); /// /// Gets the type information for an already registered type. /// /// The fully qualified name of the type and namespace. /// The for the type, if registered. Null if none is found. IUserDataDescriptor GetTypeInfo(string typeName); /// /// Gets the generic type information for an already registered type. /// /// The fully qualified name of the generic type and namespace. /// The fully qualified name of the template types. /// The for the type, if registered. Null if none is found. IUserDataDescriptor GetGenericTypeInfo(string typeName, params string[] typeNameArgs); void UnregisterType(Type type); #endregion #region Type_Checks_&Utilities bool IsRegistered(Type type); bool IsTargetType(object obj, string typeName); string TypeOf(object obj); object CreateStatic(string typeName); object CreateEnumTable(string typeName); FieldInfo FindFieldRecursively(Type type, string fieldName); void MakeFieldAccessible(IUserDataDescriptor descriptor, string fieldName); MethodInfo FindMethodRecursively(Type type, string methodName, Type[] types = null); void MakeMethodAccessible(IUserDataDescriptor descriptor, string methodName, string[] parameters = null); PropertyInfo FindPropertyRecursively(Type type, string propertyName); void MakePropertyAccessible(IUserDataDescriptor descriptor, string propertyName); void AddMethod(IUserDataDescriptor descriptor, string methodName, object function); void AddField(IUserDataDescriptor descriptor, string fieldName, DynValue value); void RemoveMember(IUserDataDescriptor descriptor, string memberName); bool HasMember(object obj, string memberName); DynValue CreateUserDataFromDescriptor(DynValue scriptObject, IUserDataDescriptor descriptor); DynValue CreateUserDataFromType(DynValue scriptObject, Type desiredType); #endregion }