diff --git a/Example.Events.Backend/Chat.cs b/Example.Events.Backend/Chat.cs deleted file mode 100644 index 2239d59..0000000 --- a/Example.Events.Backend/Chat.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Example.Events.Shared; -using mROA.Implementation; - -namespace Example.Events.Backend; - -public class Chat : IChat -{ - public void PostSymbol(string symbol, RequestContext context) - { - OnCharPosted?.Invoke(symbol, context); - } - - public event Action? OnCharPosted; - - public void OnCharPostedExternal(string p0, RequestContext p1) - { - } -} \ No newline at end of file diff --git a/Example.Events.Backend/ChatFactory.cs b/Example.Events.Backend/ChatFactory.cs deleted file mode 100644 index 90a4c65..0000000 --- a/Example.Events.Backend/ChatFactory.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Example.Events.Shared; -using mROA.Implementation.Attributes; - -namespace Example.Events.Backend; - -[SharedObjectSingleton] -public class ChatFactory : IChatFactory -{ - private static readonly Dictionary Chats = new(); - - public IChat GetChat(Guid id) - { - if (Chats.TryGetValue(id, out var chat)) - { - return chat; - } - - var created = new Chat(); - Chats.Add(id, created); - return created; - } -} \ No newline at end of file diff --git a/Example.Events.Backend/Example.Events.Backend.csproj b/Example.Events.Backend/Example.Events.Backend.csproj deleted file mode 100644 index 4e79fe1..0000000 --- a/Example.Events.Backend/Example.Events.Backend.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - Exe - net9.0 - enable - enable - - - - - - - - - - - diff --git a/Example.Events.Backend/Program.cs b/Example.Events.Backend/Program.cs deleted file mode 100644 index d42eb89..0000000 --- a/Example.Events.Backend/Program.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System.Net; -using mROA.Abstract; -using mROA.Cbor; -using mROA.Codegen; -using mROA.Implementation; -using mROA.Implementation.Backend; -using mROA.Implementation.Bootstrap; -using mROA.Implementation.Frontend; - -namespace Example.Events.Backend; - -class Program -{ - static void Main(string[] args) - { - var builder = new FullMixBuilder(); - builder.Modules.Add(new CborSerializationToolkit()); - builder.Modules.Add(new BackendIdentityGenerator()); - builder.UseNetworkGateway(IPEndPoint.Parse("192.168.1.101:6000"), typeof(NextGenerationInteractionModule), - builder.GetModule()!); - - builder.Modules.Add(new ConnectionHub()); - builder.Modules.Add(new HubRequestExtractor(typeof(RequestExtractor))); - - builder.UseBasicExecution(); - builder.Modules.Add(new CreativeRepresentationModuleProducer( - new IInjectableModule[] { builder.GetModule()! }, - typeof(RepresentationModule))); - builder.Modules.Add(new RemoteContextRepository()); -// builder.UseCollectableContextRepository(typeof(PrinterFactory).Assembly); - builder.Modules.Add(new MultiClientContextRepository(i => - { - var repo = new ContextRepository(); - repo.FillSingletons(typeof(ChatFactory).Assembly); - repo.Inject(builder.Modules.OfType().First()); - return repo; - })); - builder.SetupMethodsRepository(new CoCodegenMethodRepository()); - - builder.Modules.Add(new CancellationRepository()); - - builder.Build(); - new RemoteTypeBinder(); - - TransmissionConfig.RealContextRepository = builder.GetModule(); - TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule(); - TransmissionConfig.OwnershipRepository = new MultiClientOwnershipRepository(); - - var gateway = builder.GetModule(); - - gateway.Run(); - } -} \ No newline at end of file diff --git a/Example.Events.Client/Example.Events.Client.csproj b/Example.Events.Client/Example.Events.Client.csproj deleted file mode 100644 index 4e79fe1..0000000 --- a/Example.Events.Client/Example.Events.Client.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - Exe - net9.0 - enable - enable - - - - - - - - - - - diff --git a/Example.Events.Client/Program.cs b/Example.Events.Client/Program.cs deleted file mode 100644 index 155e969..0000000 --- a/Example.Events.Client/Program.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Diagnostics; -using System.Net; -using Example.Events.Shared; -using mROA.Cbor; -using mROA.Codegen; -using mROA.Implementation; -using mROA.Implementation.Backend; -using mROA.Implementation.Bootstrap; -using mROA.Implementation.Frontend; - -namespace Example.Events.Client; - -class Program -{ - static void Main(string[] args) - { - var builder = new FullMixBuilder(); - new RemoteTypeBinder(); - // builder.Modules.Add(new JsonSerializationToolkit()); - builder.Modules.Add(new CborSerializationToolkit()); - - builder.Modules.Add(new RemoteContextRepository()); - builder.Modules.Add(new NextGenerationInteractionModule()); - builder.Modules.Add(new RepresentationModule()); - builder.Modules.Add(new NetworkFrontendBridge(new IPEndPoint(IPAddress.Parse("95.105.78.72"), 6000))); - builder.Modules.Add(new StaticRepresentationModuleProducer()); - builder.Modules.Add(new RequestExtractor()); - builder.Modules.Add(new BasicExecutionModule()); - builder.Modules.Add(new CoCodegenMethodRepository()); - builder.UseCollectableContextRepository(); - builder.Modules.Add(new CancellationRepository()); - - builder.Build(); - - - TransmissionConfig.RealContextRepository = builder.GetModule(); - TransmissionConfig.RemoteEndpointContextRepository = builder.GetModule(); - - builder.GetModule()!.Connect(); - _ = builder.GetModule()!.StartExtraction(); - - var chatFactory = - TransmissionConfig.RemoteEndpointContextRepository.GetSingleObject(typeof(IChatFactory), 0) as IChatFactory; - var chat = chatFactory.GetChat(Guid.Empty); - chat.OnCharPosted += (s, context) => { Console.Write(s); }; - while (true) - { - var input = Console.ReadKey(true); - if (input.Key == ConsoleKey.Escape) - return; - - var symb = ""; - - if (input.Key == ConsoleKey.Backspace) - { - symb = "\b \b"; - } - else - symb = input.KeyChar.ToString(); -#if TRACE - Console.Write(symb); - var sw = Stopwatch.StartNew(); - chat.PostSymbol(symb); - sw.Stop(); - Console.WriteLine($"{sw.ElapsedMilliseconds}ms"); -#else - Console.Write(symb); - chat.PostSymbol(symb); -#endif - } - } -} \ No newline at end of file diff --git a/Example.Events.Shared/Example.Events.Shared.csproj b/Example.Events.Shared/Example.Events.Shared.csproj deleted file mode 100644 index 98d21fd..0000000 --- a/Example.Events.Shared/Example.Events.Shared.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - net9.0 - enable - 9 - - - - - - - - - - diff --git a/Example.Events.Shared/IChat.cs b/Example.Events.Shared/IChat.cs deleted file mode 100644 index a37b06a..0000000 --- a/Example.Events.Shared/IChat.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using mROA.Implementation; -using mROA.Implementation.Attributes; - -namespace Example.Events.Shared -{ - [SharedObjectInterface] - public partial interface IChat : IShared - { - void PostSymbol(string symbol, RequestContext context = default); - event Action OnCharPosted; - } -} \ No newline at end of file diff --git a/Example.Events.Shared/IChatFactory.cs b/Example.Events.Shared/IChatFactory.cs deleted file mode 100644 index b73949b..0000000 --- a/Example.Events.Shared/IChatFactory.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using mROA.Implementation; -using mROA.Implementation.Attributes; - -namespace Example.Events.Shared -{ - [SharedObjectInterface] - public interface IChatFactory : IShared - { - IChat GetChat(Guid id); - } -} \ No newline at end of file diff --git a/mROA.Codegen/mROASourceGenerator.cs b/mROA.Codegen/mROASourceGenerator.cs index 833954c..c1e6576 100644 --- a/mROA.Codegen/mROASourceGenerator.cs +++ b/mROA.Codegen/mROASourceGenerator.cs @@ -26,7 +26,7 @@ namespace mROA.Codegen private TemplateDocument InterfaceTemplateOriginal; private TemplateDocument InterfaceTemplate; private TemplateDocument BinderTemplate; - + private TemplateDocument MethodInvokerOriginal; private static Predicate ParameterFilter = i => i.Type.Name is "CancellationToken" or "RequestContext"; @@ -36,6 +36,8 @@ namespace mROA.Codegen public void Initialize(GeneratorInitializationContext context) { MethodRepoTemplate = TemplateReader.FromEmbeddedResource("MethodRepo.cstmpl"); + MethodInvokerOriginal = + ((InnerTemplateSection)MethodRepoTemplate["syncInvoker"])?.InnerTemplate; ClassTemplateOriginal = TemplateReader.FromEmbeddedResource("RemoteEndpoint.cstmpl"); BinderTemplate = TemplateReader.FromEmbeddedResource("RemoteTypeBinder.cstmpl"); InterfaceTemplateOriginal = TemplateReader.FromEmbeddedResource("PartialInterface.cstmpl"); @@ -182,9 +184,7 @@ namespace mROA.Codegen { var methodsStringed = invokers; - // var invokersJoin = string.Join(",\r\n\t\t\t", methodsStringed); - - // MethodRepoTemplate.Insert("invoker", invokersJoin); + var coCodegenRepoCode = MethodRepoTemplate.Compile(); #if !DONT_ADD @@ -388,7 +388,7 @@ namespace mROA.Codegen } else { - var invokerTemplate = (TemplateDocument)((InnerTemplateSection)MethodRepoTemplate["syncInvoker"]).InnerTemplate.Clone(); + var invokerTemplate = (TemplateDocument)MethodInvokerOriginal.Clone(); invokerTemplate.AddDefine("isVoid", isVoid.ToString().ToLower()); invokerTemplate.AddDefine("returnType", isVoid ? "void" : method.ReturnType.ToDisplayString()); invokerTemplate.AddDefine("parametersType", parameterTypes); @@ -467,18 +467,22 @@ namespace mROA.Codegen } } + + var parametersInsert = string.Join(", ", parametersInsertList); - var backend = $@"new mROA.Implementation.MethodInvoker -{level}{{ -{level} IsVoid = true, -{level} ReturnType = typeof(void), -{level} ParameterTypes = new Type[] {{ {parameterTypes} }}, -{level} SuitableType = typeof({baseInterface.ToDisplayString()}), -{level} Invoking = (i, parameters, special) => {{ + + var funcInvoking = $@"{{ {level} (i as {baseInterface.ToDisplayString()}).{EventExternalName(eventSymbol)}({parametersInsert}); {level} return null; -{level} }} -{level}}}"; +{level} }}"; + + var invokerTemplate = (TemplateDocument)MethodInvokerOriginal.Clone(); + invokerTemplate.AddDefine("isVoid", "true"); + invokerTemplate.AddDefine("returnType", "void"); + invokerTemplate.AddDefine("parametersType", parameterTypes); + invokerTemplate.AddDefine("suitableType", baseInterface.ToDisplayString()); + invokerTemplate.AddDefine("funcInvoking", funcInvoking); + var backend = invokerTemplate.Compile(); MethodRepoTemplate.Insert("invoker", backend); invokers.Add(backend); @@ -503,24 +507,38 @@ namespace mROA.Codegen var parameterInserts = string.Join(", ", method.Parameters.Select( p => Caster(p.Type, "parameters[" + method.Parameters.IndexOf(p) + "]"))); - backend = $@"new mROA.Implementation.MethodInvoker -{level}{{ -{level} IsVoid = false, -{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), -{level} ParameterTypes = new Type[] {{ {parameterTypes} }}, -{level} SuitableType = typeof({baseInterace.ToDisplayString()}), -{level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()})[{parameterInserts}], -{level}}}"; + + var invokerTemplate = (TemplateDocument)MethodInvokerOriginal.Clone(); + invokerTemplate.AddDefine("isVoid", "false"); + invokerTemplate.AddDefine("returnType", method.ReturnType.ToDisplayString()); + invokerTemplate.AddDefine("parametersType", parameterTypes); + invokerTemplate.AddDefine("suitableType", baseInterace.ToDisplayString()); + invokerTemplate.AddDefine("funcInvoking", $"(i as {method.ContainingType.ToDisplayString()})[{parameterInserts}]"); + backend = invokerTemplate.Compile(); +// backend = $@"new mROA.Implementation.MethodInvoker +// {level}{{ +// {level} IsVoid = false, +// {level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), +// {level} ParameterTypes = new Type[] {{ {parameterTypes} }}, +// {level} SuitableType = typeof({baseInterace.ToDisplayString()}), +// {level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()})[{parameterInserts}], +// {level}}}"; } else { - backend = $@"new mROA.Implementation.MethodInvoker -{level}{{ -{level} IsVoid = false, -{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), -{level} SuitableType = typeof({baseInterace.ToDisplayString()}), -{level} Invoking = (i, _, _) => (i as {method.ContainingType.ToDisplayString()}).{(method.AssociatedSymbol as IPropertySymbol)!.Name}, -{level}}}"; + var invokerTemplate = (TemplateDocument)MethodInvokerOriginal.Clone(); + invokerTemplate.AddDefine("isVoid", "false"); + invokerTemplate.AddDefine("returnType", method.ReturnType.ToDisplayString()); + invokerTemplate.AddDefine("suitableType", baseInterace.ToDisplayString()); + invokerTemplate.AddDefine("funcInvoking", $"(i as {method.ContainingType.ToDisplayString()}).{(method.AssociatedSymbol as IPropertySymbol)!.Name}"); + backend = invokerTemplate.Compile(); +// backend = $@"new mROA.Implementation.MethodInvoker +// {level}{{ +// {level} IsVoid = false, +// {level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), +// {level} SuitableType = typeof({baseInterace.ToDisplayString()}), +// {level} Invoking = (i, _, _) => (i as {method.ContainingType.ToDisplayString()}).{(method.AssociatedSymbol as IPropertySymbol)!.Name}, +// {level}}}"; } frontend = @@ -541,25 +559,43 @@ namespace mROA.Codegen var valueInsert = Caster(method.Parameters.Last().Type, "parameters[" + (method.Parameters.Length - 1) + "]"); - backend = $@"new mROA.Implementation.MethodInvoker -{level}{{ -{level} IsVoid = true, -{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), -{level} ParameterTypes = new Type[] {{ {parameterTypes} }}, -{level} SuitableType = typeof({baseInterace.ToDisplayString()}), -{level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()})[{parameterInserts}] = {valueInsert}, -{level}}}"; + var invokerTemplate = (TemplateDocument)MethodInvokerOriginal.Clone(); + + + invokerTemplate.AddDefine("isVoid", "true"); + invokerTemplate.AddDefine("returnType", method.ReturnType.ToDisplayString()); + invokerTemplate.AddDefine("parametersType", parameterTypes); + invokerTemplate.AddDefine("suitableType", baseInterace.ToDisplayString()); + invokerTemplate.AddDefine("funcInvoking", $"(i as {method.ContainingType.ToDisplayString()})[{parameterInserts}] = {valueInsert}"); + backend = invokerTemplate.Compile(); +// backend = $@"new mROA.Implementation.MethodInvoker +// {level}{{ +// {level} IsVoid = true, +// {level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), +// {level} ParameterTypes = new Type[] {{ {parameterTypes} }}, +// {level} SuitableType = typeof({baseInterace.ToDisplayString()}), +// {level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()})[{parameterInserts}] = {valueInsert}, +// {level}}}"; } else { - backend = $@"new mROA.Implementation.MethodInvoker -{level}{{ -{level} IsVoid = true, -{level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), -{level} ParameterTypes = new Type[] {{ typeof({method.Parameters.First().Type.ToDisplayString()}) }}, -{level} SuitableType = typeof({baseInterace.ToDisplayString()}), -{level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()}).{(method.AssociatedSymbol as IPropertySymbol)!.Name} = {Caster((method.AssociatedSymbol as IPropertySymbol)!.Type, "parameters[0]")}, -{level}}}"; + var invokerTemplate = (TemplateDocument)MethodInvokerOriginal.Clone(); + + invokerTemplate.AddDefine("isVoid", "true"); + invokerTemplate.AddDefine("returnType", method.ReturnType.ToDisplayString()); + invokerTemplate.AddDefine("parametersType", $"typeof({method.Parameters.First().Type.ToDisplayString()})"); + invokerTemplate.AddDefine("suitableType", baseInterace.ToDisplayString()); + invokerTemplate.AddDefine("funcInvoking", $"(i as {method.ContainingType.ToDisplayString()}).{(method.AssociatedSymbol as IPropertySymbol)!.Name} = {Caster((method.AssociatedSymbol as IPropertySymbol)!.Type, "parameters[0]")}"); + backend = invokerTemplate.Compile(); + +// backend = $@"new mROA.Implementation.MethodInvoker +// {level}{{ +// {level} IsVoid = true, +// {level} ReturnType = typeof({method.ReturnType.ToDisplayString()}), +// {level} ParameterTypes = new Type[] {{ typeof({method.Parameters.First().Type.ToDisplayString()}) }}, +// {level} SuitableType = typeof({baseInterace.ToDisplayString()}), +// {level} Invoking = (i, parameters, _) => (i as {method.ContainingType.ToDisplayString()}).{(method.AssociatedSymbol as IPropertySymbol)!.Name} = {Caster((method.AssociatedSymbol as IPropertySymbol)!.Type, "parameters[0]")}, +// {level}}}"; } frontend = $"set => CallAsync({index}, new object[] {{ {parametersArray} }}).Wait();"; diff --git a/mROA.sln b/mROA.sln index bf3763f..e382133 100644 --- a/mROA.sln +++ b/mROA.sln @@ -23,14 +23,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mROA.Cbor", "mROA.Cbor\mROA EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TotalDemo", "TotalDemo", "{FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Events", "Events", "{032E1288-4D26-4FA5-ABB6-E7D738F319DE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Example.Events.Shared", "Example.Events.Shared\Example.Events.Shared.csproj", "{6342C7FC-12B4-4BC6-BA25-159B1400D952}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Example.Events.Backend", "Example.Events.Backend\Example.Events.Backend.csproj", "{B63F58B2-8D86-42F3-96A5-470CB449BFD3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Example.Events.Client", "Example.Events.Client\Example.Events.Client.csproj", "{98451C0E-E179-4F5F-9F1A-8B353EDE2EBC}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mROA.CodegenTools", "mROA.CodegenTools\mROA.CodegenTools.csproj", "{2A2821B7-E5C5-443A-9801-9622493594A0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Codegen", "Codegen", "{3DB22457-E65B-426F-B3DD-08C615132B3E}" @@ -75,18 +67,6 @@ Global {6211E4EA-13FD-4EB1-8E6A-C0173DD0784A}.Debug|Any CPU.Build.0 = Debug|Any CPU {6211E4EA-13FD-4EB1-8E6A-C0173DD0784A}.Release|Any CPU.ActiveCfg = Release|Any CPU {6211E4EA-13FD-4EB1-8E6A-C0173DD0784A}.Release|Any CPU.Build.0 = Release|Any CPU - {6342C7FC-12B4-4BC6-BA25-159B1400D952}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6342C7FC-12B4-4BC6-BA25-159B1400D952}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6342C7FC-12B4-4BC6-BA25-159B1400D952}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6342C7FC-12B4-4BC6-BA25-159B1400D952}.Release|Any CPU.Build.0 = Release|Any CPU - {B63F58B2-8D86-42F3-96A5-470CB449BFD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B63F58B2-8D86-42F3-96A5-470CB449BFD3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B63F58B2-8D86-42F3-96A5-470CB449BFD3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B63F58B2-8D86-42F3-96A5-470CB449BFD3}.Release|Any CPU.Build.0 = Release|Any CPU - {98451C0E-E179-4F5F-9F1A-8B353EDE2EBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {98451C0E-E179-4F5F-9F1A-8B353EDE2EBC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {98451C0E-E179-4F5F-9F1A-8B353EDE2EBC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {98451C0E-E179-4F5F-9F1A-8B353EDE2EBC}.Release|Any CPU.Build.0 = Release|Any CPU {2A2821B7-E5C5-443A-9801-9622493594A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2A2821B7-E5C5-443A-9801-9622493594A0}.Debug|Any CPU.Build.0 = Debug|Any CPU {2A2821B7-E5C5-443A-9801-9622493594A0}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -104,10 +84,6 @@ Global {A9BB364E-0BA6-40B9-A293-757BC48EFC06} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E} {9BD25A13-3165-47C0-9EAA-5C59EC490E32} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E} {E7703F5B-F2A6-4A88-AA57-EBB1E38D533E} = {FC4FA752-10A7-4D78-A7C2-9BCD8A81FB5E} - {032E1288-4D26-4FA5-ABB6-E7D738F319DE} = {EAE92F5A-664C-41AB-8811-5885524B5347} - {6342C7FC-12B4-4BC6-BA25-159B1400D952} = {032E1288-4D26-4FA5-ABB6-E7D738F319DE} - {B63F58B2-8D86-42F3-96A5-470CB449BFD3} = {032E1288-4D26-4FA5-ABB6-E7D738F319DE} - {98451C0E-E179-4F5F-9F1A-8B353EDE2EBC} = {032E1288-4D26-4FA5-ABB6-E7D738F319DE} {3DB22457-E65B-426F-B3DD-08C615132B3E} = {EAE92F5A-664C-41AB-8811-5885524B5347} {87396E86-D7ED-4556-AB50-F3696FEF9072} = {3DB22457-E65B-426F-B3DD-08C615132B3E} EndGlobalSection