From 9f0832f5fc982040020830ac02e29781ddb78256 Mon Sep 17 00:00:00 2001 From: Michael Becker Date: Sun, 1 Sep 2024 00:57:20 -0400 Subject: [PATCH] should not need to actually realize the InstanceHandle in order to register a SystemRoutine --- mocha-common | 2 +- .../app/Mocha.ServerApplication/Program.cs | 1 - mocha-dotnet/src/lib/Mocha.Core/Oms.cs | 19 +++++++++---------- .../lib/Mocha.Core/OmsSystemRoutineBuilder.cs | 12 ++++++------ .../Mocha.Core/Oop/ConcreteInstanceWrapper.cs | 1 - .../Mocha.Core/Oop/DeferredInstanceWrapper.cs | 2 +- .../src/lib/Mocha.Core/Oop/InstanceWrapper.cs | 2 ++ .../src/lib/Mocha.Core/Oop/SystemRoutine.cs | 4 ++-- .../SystemRoutines/SystemAttributeRoutine.cs | 4 ++-- .../SystemInstanceSetRoutine.cs | 2 +- 10 files changed, 24 insertions(+), 25 deletions(-) diff --git a/mocha-common b/mocha-common index 12ac9ab..276a8c0 160000 --- a/mocha-common +++ b/mocha-common @@ -1 +1 @@ -Subproject commit 12ac9ab8c068f850ec7a3850e95562accbe91725 +Subproject commit 276a8c031f0b4c7fcc9a349b15bcd08686a2ae06 diff --git a/mocha-dotnet/src/app/Mocha.ServerApplication/Program.cs b/mocha-dotnet/src/app/Mocha.ServerApplication/Program.cs index 0c7dd21..ef412f8 100644 --- a/mocha-dotnet/src/app/Mocha.ServerApplication/Program.cs +++ b/mocha-dotnet/src/app/Mocha.ServerApplication/Program.cs @@ -81,7 +81,6 @@ public class Program : MochaWebApplication { // FIXME! : selecting tenant doesn't seem to be working, routes get overwritten / not created oms.SelectTenant(t_super); - oms.AddLibraryReference(l_System); InstanceHandle c_Application = oms.GetInstance(KnownInstanceGuids.Classes.Application); InstanceHandle i_Application = oms.CreateInstanceOf(c_Application, new Guid("{773f6c6e-6cef-4a04-b333-ac097c0ab705}")); diff --git a/mocha-dotnet/src/lib/Mocha.Core/Oms.cs b/mocha-dotnet/src/lib/Mocha.Core/Oms.cs index f7e6798..ade212e 100644 --- a/mocha-dotnet/src/lib/Mocha.Core/Oms.cs +++ b/mocha-dotnet/src/lib/Mocha.Core/Oms.cs @@ -64,13 +64,11 @@ public abstract class Oms { InitializeInternal(); - if (TryGetInstance(KnownInstanceGuids.SystemAttributeRoutines.GetRuntimeVersion, out InstanceHandle h_RuntimeVersion)) + RegisterSystemRoutine(KnownInstanceGuids.SystemAttributeRoutines.GetRuntimeVersion, new SystemAttributeRoutine(this, KnownInstanceGuids.SystemAttributeRoutines.GetRuntimeVersion, delegate (Oms oms, OmsContext context) { - RegisterSystemRoutine(h_RuntimeVersion, new SystemAttributeRoutine(h_RuntimeVersion, delegate (Oms oms, OmsContext context) - { - return RuntimeVersion.ToString(); - })); - } + return RuntimeVersion.ToString(); + })); + DebugOms = this; } @@ -903,15 +901,16 @@ public abstract class Oms return sb.ToString(); } - public Dictionary _systemRoutinesByInstance = new Dictionary(); - internal void RegisterSystemRoutine(InstanceHandle handle, SystemRoutine routine) + public Dictionary _systemRoutinesByInstance = new Dictionary(); + internal void RegisterSystemRoutine(Guid globalIdentifier, SystemRoutine routine) { - _systemRoutinesByInstance[handle] = routine; + _systemRoutinesByInstance[globalIdentifier] = routine; } internal object? ExecuteSystemRoutine(OmsContext context, InstanceHandle handle) { - object? value = _systemRoutinesByInstance[handle].Execute(this, context); + Guid globalIdentifier = this.GetGlobalIdentifier(handle); + object? value = _systemRoutinesByInstance[globalIdentifier].Execute(this, context); return value; } diff --git a/mocha-dotnet/src/lib/Mocha.Core/OmsSystemRoutineBuilder.cs b/mocha-dotnet/src/lib/Mocha.Core/OmsSystemRoutineBuilder.cs index d703d38..586a499 100644 --- a/mocha-dotnet/src/lib/Mocha.Core/OmsSystemRoutineBuilder.cs +++ b/mocha-dotnet/src/lib/Mocha.Core/OmsSystemRoutineBuilder.cs @@ -31,24 +31,24 @@ public class OmsSystemRoutineBuilder { InstanceHandle handle = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.SystemAttributeRoutine), globalIdentifier); - SystemAttributeRoutine routine = new SystemAttributeRoutine(handle, func); - Oms.RegisterSystemRoutine(handle, routine); + SystemAttributeRoutine routine = new SystemAttributeRoutine(Oms, globalIdentifier, func); + Oms.RegisterSystemRoutine(globalIdentifier, routine); return routine; } public SystemAttributeRoutine CreateSystemAttributeRoutine(Guid globalIdentifier, Func func) { InstanceHandle handle = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.SystemAttributeRoutine), globalIdentifier); - SystemAttributeRoutine routine = new SystemAttributeRoutine(handle, func); - Oms.RegisterSystemRoutine(handle, routine); + SystemAttributeRoutine routine = new SystemAttributeRoutine(Oms, globalIdentifier, func); + Oms.RegisterSystemRoutine(globalIdentifier, routine); return routine; } public SystemInstanceSetRoutine CreateSystemInstanceSetRoutine(Guid globalIdentifier, Func> func) { InstanceHandle handle = Oms.CreateInstanceOf(Oms.GetInstance(KnownInstanceGuids.Classes.SystemInstanceSetRoutine), globalIdentifier); - SystemInstanceSetRoutine routine = new SystemInstanceSetRoutine(handle, func); - Oms.RegisterSystemRoutine(handle, routine); + SystemInstanceSetRoutine routine = new SystemInstanceSetRoutine(Oms, globalIdentifier, func); + Oms.RegisterSystemRoutine(globalIdentifier, routine); return routine; } } \ No newline at end of file diff --git a/mocha-dotnet/src/lib/Mocha.Core/Oop/ConcreteInstanceWrapper.cs b/mocha-dotnet/src/lib/Mocha.Core/Oop/ConcreteInstanceWrapper.cs index 0fa0888..55837dd 100644 --- a/mocha-dotnet/src/lib/Mocha.Core/Oop/ConcreteInstanceWrapper.cs +++ b/mocha-dotnet/src/lib/Mocha.Core/Oop/ConcreteInstanceWrapper.cs @@ -19,7 +19,6 @@ namespace Mocha.Core.Oop; public abstract class ConcreteInstanceWrapper : InstanceWrapper { - public abstract Guid ClassId { get; } private InstanceHandle TheHandle { get; } internal ConcreteInstanceWrapper(InstanceHandle handle) diff --git a/mocha-dotnet/src/lib/Mocha.Core/Oop/DeferredInstanceWrapper.cs b/mocha-dotnet/src/lib/Mocha.Core/Oop/DeferredInstanceWrapper.cs index 06c72ac..b4eeb13 100644 --- a/mocha-dotnet/src/lib/Mocha.Core/Oop/DeferredInstanceWrapper.cs +++ b/mocha-dotnet/src/lib/Mocha.Core/Oop/DeferredInstanceWrapper.cs @@ -17,7 +17,7 @@ namespace Mocha.Core.Oop; -public class DeferredInstanceWrapper : InstanceWrapper +public abstract class DeferredInstanceWrapper : InstanceWrapper { private Oms oms; private Guid globalIdentifier; diff --git a/mocha-dotnet/src/lib/Mocha.Core/Oop/InstanceWrapper.cs b/mocha-dotnet/src/lib/Mocha.Core/Oop/InstanceWrapper.cs index 0a24532..2ef0adf 100644 --- a/mocha-dotnet/src/lib/Mocha.Core/Oop/InstanceWrapper.cs +++ b/mocha-dotnet/src/lib/Mocha.Core/Oop/InstanceWrapper.cs @@ -19,6 +19,8 @@ namespace Mocha.Core.Oop; public abstract class InstanceWrapper : IInstanceWrapper { + public abstract Guid ClassId { get; } + private InstanceHandle _Handle = InstanceHandle.Empty; protected abstract InstanceHandle GetHandleInternal(); diff --git a/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutine.cs b/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutine.cs index 84b2c29..a89168f 100644 --- a/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutine.cs +++ b/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutine.cs @@ -17,9 +17,9 @@ namespace Mocha.Core.Oop; -public abstract class SystemRoutine : ConcreteInstanceWrapper +public abstract class SystemRoutine : DeferredInstanceWrapper { - internal SystemRoutine(InstanceHandle handle) : base(handle) { } + internal SystemRoutine(Oms oms, Guid globalIdentifier) : base(oms, globalIdentifier) { } protected abstract object? ExecuteInternal(Oms oms, OmsContext context); public object? Execute(Oms oms, OmsContext context) diff --git a/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutines/SystemAttributeRoutine.cs b/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutines/SystemAttributeRoutine.cs index bdf35fb..f6ff1a8 100644 --- a/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutines/SystemAttributeRoutine.cs +++ b/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutines/SystemAttributeRoutine.cs @@ -21,7 +21,7 @@ public class SystemAttributeRoutine : SystemRoutine { public override Guid ClassId => KnownInstanceGuids.Classes.SystemAttributeRoutine; private Func Func { get; } - internal SystemAttributeRoutine(InstanceHandle handle, Func func) : base(handle) + internal SystemAttributeRoutine(Oms oms, Guid globalIdentifier, Func func) : base(oms, globalIdentifier) { Func = func; } @@ -34,7 +34,7 @@ public class SystemAttributeRoutine : SystemRoutine } public class SystemAttributeRoutine : SystemAttributeRoutine { - internal SystemAttributeRoutine(InstanceHandle handle, Func func) : base(handle, new Func(delegate(Oms oms, OmsContext context) { return func(oms, context); })) + internal SystemAttributeRoutine(Oms oms, Guid globalIdentifier, Func func) : base(oms, globalIdentifier, new Func(delegate(Oms oms, OmsContext context) { return func(oms, context); })) { } } diff --git a/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutines/SystemInstanceSetRoutine.cs b/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutines/SystemInstanceSetRoutine.cs index 1cec3e9..d301a79 100644 --- a/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutines/SystemInstanceSetRoutine.cs +++ b/mocha-dotnet/src/lib/Mocha.Core/Oop/SystemRoutines/SystemInstanceSetRoutine.cs @@ -21,7 +21,7 @@ public class SystemInstanceSetRoutine : SystemRoutine { public override Guid ClassId => KnownInstanceGuids.Classes.SystemInstanceSetRoutine; private Func> Func { get; } - internal SystemInstanceSetRoutine(InstanceHandle handle, Func> func) : base(handle) + internal SystemInstanceSetRoutine(Oms oms, Guid globalIdentifier, Func> func) : base(oms, globalIdentifier) { Func = func; }