diff --git a/BotSharp.Core/PlatformServiceCollectionExtensions.cs b/BotSharp.Core/PlatformServiceCollectionExtensions.cs new file mode 100644 index 00000000..d2447ada --- /dev/null +++ b/BotSharp.Core/PlatformServiceCollectionExtensions.cs @@ -0,0 +1,53 @@ +using Colorful; +using Microsoft.Extensions.Configuration; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Reflection; +using System.Text; +using Console = Colorful.Console; + +namespace Microsoft.Extensions.DependencyInjection +{ + public static class PlatformServiceCollectionExtensions + { + public static IServiceCollection AddPlatformEmulator(this IServiceCollection services, IConfiguration configuration, Action action) + { + var platform = configuration.GetValue("Platform"); + var platformAssemblyName = configuration.GetValue("platformAssemblyName"); + var engine = configuration.GetValue($"{platform}:BotEngine"); + + Formatter[] settings = new Formatter[] + { + new Formatter(platform, Color.Yellow), + new Formatter(platformAssemblyName, Color.Yellow), + new Formatter(engine, Color.Yellow), + }; + + // load platform emulator dynamically + Console.WriteLine(); + + var platformDllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"{platformAssemblyName}.dll"); + if (File.Exists(platformDllPath)) + { + Assembly library = Assembly.LoadFile(platformDllPath); + action(library); + Console.WriteLineFormatted("Loaded {0} platform emulator from {1} assembly which is using {2} engine.", Color.White, settings); + } + else + { + Console.WriteLine($"Can't load {platformAssemblyName} assembly."); + } + + Console.WriteLine(); + + /*Type myClass = (from type in library.GetExportedTypes() + where typeof(IMyInterface).IsAssignableFrom(type) + select type) + .Single();*/ + + return services; + } + } +} diff --git a/BotSharp.WebHost/BotSharp.WebHost.csproj b/BotSharp.WebHost/BotSharp.WebHost.csproj index 68c7fd5b..ae9a330a 100644 --- a/BotSharp.WebHost/BotSharp.WebHost.csproj +++ b/BotSharp.WebHost/BotSharp.WebHost.csproj @@ -31,21 +31,25 @@ + + + + @@ -63,7 +67,6 @@ - @@ -74,6 +77,10 @@ + + + + PreserveNewest diff --git a/BotSharp.WebHost/BotSharp.WebHost.csproj.user b/BotSharp.WebHost/BotSharp.WebHost.csproj.user index e1c26c60..ec8e513b 100644 --- a/BotSharp.WebHost/BotSharp.WebHost.csproj.user +++ b/BotSharp.WebHost/BotSharp.WebHost.csproj.user @@ -2,7 +2,7 @@ BotSharp.WebHost - RASA + Docker ProjectDebugger diff --git a/BotSharp.WebHost/Properties/PublishProfiles/Docker.pubxml b/BotSharp.WebHost/Properties/PublishProfiles/Docker.pubxml new file mode 100644 index 00000000..65e0607a --- /dev/null +++ b/BotSharp.WebHost/Properties/PublishProfiles/Docker.pubxml @@ -0,0 +1,22 @@ + + + + + FileSystem + FileSystem + Release + Any CPU + + True + False + 03dca427-327a-4fc9-9a2f-57d17f16708c + publish\ + True + netcoreapp2.1 + false + <_IsPortable>true + + \ No newline at end of file diff --git a/BotSharp.WebHost/Properties/PublishProfiles/Docker.pubxml.user b/BotSharp.WebHost/Properties/PublishProfiles/Docker.pubxml.user new file mode 100644 index 00000000..1c02563d --- /dev/null +++ b/BotSharp.WebHost/Properties/PublishProfiles/Docker.pubxml.user @@ -0,0 +1,11 @@ + + + + + + <_PublishTargetUrl>C:\Users\haipi\Documents\Projects\BotSharp\BotSharp.WebHost\publish\ + + \ No newline at end of file diff --git a/BotSharp.WebHost/Settings/app.json b/BotSharp.WebHost/Settings/app.json index 4c647dff..58a0a84f 100644 --- a/BotSharp.WebHost/Settings/app.json +++ b/BotSharp.WebHost/Settings/app.json @@ -2,6 +2,7 @@ "assemblies": "BotSharp.Core", "platform": "DialogflowAi", + "platformAssemblyName": "BotSharp.Platform.Dialogflow", "version": "0.1.0", diff --git a/BotSharp.WebHost/Startup.cs b/BotSharp.WebHost/Startup.cs index 77541628..b0d514e0 100644 --- a/BotSharp.WebHost/Startup.cs +++ b/BotSharp.WebHost/Startup.cs @@ -1,10 +1,8 @@ -using Colorful; -using DotNetToolkit.JwtHelper; +using DotNetToolkit.JwtHelper; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.PlatformAbstractions; using Newtonsoft.Json.Serialization; using Swashbuckle.AspNetCore.Swagger; using System; @@ -12,8 +10,6 @@ using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; -using System.Reflection; -using Console = Colorful.Console; namespace BotSharp.WebHost { @@ -31,7 +27,7 @@ namespace BotSharp.WebHost services.AddCors(); services.AddJwtAuth(Configuration); - services.AddMvc(options => + var mvcBuilder = services.AddMvc(options => { options.RespectBrowserAcceptHeader = true; }).AddJsonOptions(options => @@ -40,6 +36,8 @@ namespace BotSharp.WebHost options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); }); + services.AddPlatformEmulator(Configuration, assembly => mvcBuilder.AddApplicationPart(assembly)); + services.AddSwaggerGen(c => { c.AddSecurityDefinition("Bearer", new ApiKeyScheme() @@ -94,9 +92,9 @@ namespace BotSharp.WebHost c.DocumentTitle = info.Title; c.InjectStylesheet(Configuration.GetValue("Swagger:Stylesheet")); - Console.WriteLine($"{info.Title} [{info.Version}] {info.License.Name}", Color.Gray); - Console.WriteLine($"{info.Description}", Color.Gray); - Console.WriteLine($"{info.Contact.Name}", Color.Gray); + Console.WriteLine($"{info.Title} [{info.Version}] {info.License.Name}"); + Console.WriteLine($"{info.Description}"); + Console.WriteLine($"{info.Contact.Name}"); }); app.Use(async (context, next) => @@ -125,25 +123,6 @@ namespace BotSharp.WebHost loader.Env = env; loader.Config = Configuration; loader.Load();*/ - - // load dll dynamic - /*Assembly library = Assembly.LoadFile(Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, "BotSharp.Platform.Articulate.dll")); - Type myClass = (from type in library.GetExportedTypes() - where typeof(IMyInterface).IsAssignableFrom(type) - select type) - .Single();*/ - - var platform = Configuration.GetValue("Platform"); - var engine = Configuration.GetValue($"{platform}:BotEngine"); - Formatter[] settings = new Formatter[] - { - new Formatter(platform, Color.Yellow), - new Formatter(engine, Color.Yellow), - }; - - Console.WriteLine(); - Console.WriteLineFormatted("{0} platform emulator powered by {1} engine.", Color.White, settings); - Console.WriteLine(); } } } \ No newline at end of file diff --git a/BotSharp.sln b/BotSharp.sln index ed4e217b..9321ee62 100644 --- a/BotSharp.sln +++ b/BotSharp.sln @@ -22,10 +22,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Abstracti EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Models", "BotSharp.Platform.Models\BotSharp.Platform.Models.csproj", "{C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Platform.Dialogflow", "..\botsharp-dialogflow\BotSharp.Platform.Dialogflow\BotSharp.Platform.Dialogflow.csproj", "{83D56CDD-7122-48D3-9CDC-BCE21CB10681}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 + DIALOGFLOW|Any CPU = DIALOGFLOW|Any CPU + DIALOGFLOW|x64 = DIALOGFLOW|x64 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 EndGlobalSection @@ -34,6 +38,10 @@ Global {95780673-2A1A-4953-962F-C46CBFDD07FF}.Debug|Any CPU.Build.0 = Debug|Any CPU {95780673-2A1A-4953-962F-C46CBFDD07FF}.Debug|x64.ActiveCfg = Debug|x64 {95780673-2A1A-4953-962F-C46CBFDD07FF}.Debug|x64.Build.0 = Debug|x64 + {95780673-2A1A-4953-962F-C46CBFDD07FF}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {95780673-2A1A-4953-962F-C46CBFDD07FF}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {95780673-2A1A-4953-962F-C46CBFDD07FF}.DIALOGFLOW|x64.ActiveCfg = DIALOGFLOW|x64 + {95780673-2A1A-4953-962F-C46CBFDD07FF}.DIALOGFLOW|x64.Build.0 = DIALOGFLOW|x64 {95780673-2A1A-4953-962F-C46CBFDD07FF}.Release|Any CPU.ActiveCfg = Release|Any CPU {95780673-2A1A-4953-962F-C46CBFDD07FF}.Release|Any CPU.Build.0 = Release|Any CPU {95780673-2A1A-4953-962F-C46CBFDD07FF}.Release|x64.ActiveCfg = Release|x64 @@ -42,6 +50,10 @@ Global {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Debug|Any CPU.Build.0 = Debug|Any CPU {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Debug|x64.ActiveCfg = Debug|x64 {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Debug|x64.Build.0 = Debug|x64 + {03DCA427-327A-4FC9-9A2F-57D17F16708C}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {03DCA427-327A-4FC9-9A2F-57D17F16708C}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {03DCA427-327A-4FC9-9A2F-57D17F16708C}.DIALOGFLOW|x64.ActiveCfg = DIALOGFLOW|x64 + {03DCA427-327A-4FC9-9A2F-57D17F16708C}.DIALOGFLOW|x64.Build.0 = DIALOGFLOW|x64 {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Release|Any CPU.ActiveCfg = Release|Any CPU {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Release|Any CPU.Build.0 = Release|Any CPU {03DCA427-327A-4FC9-9A2F-57D17F16708C}.Release|x64.ActiveCfg = Release|x64 @@ -50,6 +62,10 @@ Global {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Debug|Any CPU.Build.0 = Debug|Any CPU {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Debug|x64.ActiveCfg = Debug|x64 {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Debug|x64.Build.0 = Debug|x64 + {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.DIALOGFLOW|x64.ActiveCfg = DIALOGFLOW|x64 + {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.DIALOGFLOW|x64.Build.0 = DIALOGFLOW|x64 {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Release|Any CPU.ActiveCfg = Release|Any CPU {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Release|Any CPU.Build.0 = Release|Any CPU {C2FDC855-BD88-4041-B0FF-3AA8A1C11A22}.Release|x64.ActiveCfg = Release|x64 @@ -58,6 +74,10 @@ Global {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.Debug|x64.ActiveCfg = Debug|x64 {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.Debug|x64.Build.0 = Debug|x64 + {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.DIALOGFLOW|x64.ActiveCfg = DIALOGFLOW|x64 + {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.DIALOGFLOW|x64.Build.0 = DIALOGFLOW|x64 {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.Release|Any CPU.ActiveCfg = Release|Any CPU {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.Release|Any CPU.Build.0 = Release|Any CPU {8A1F6277-FFCB-4CCD-B798-876D8BE525A9}.Release|x64.ActiveCfg = Release|x64 @@ -66,6 +86,10 @@ Global {30F80E7D-951A-4E8F-9C3C-2C866528EABD}.Debug|Any CPU.Build.0 = Debug|Any CPU {30F80E7D-951A-4E8F-9C3C-2C866528EABD}.Debug|x64.ActiveCfg = Debug|x64 {30F80E7D-951A-4E8F-9C3C-2C866528EABD}.Debug|x64.Build.0 = Debug|x64 + {30F80E7D-951A-4E8F-9C3C-2C866528EABD}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {30F80E7D-951A-4E8F-9C3C-2C866528EABD}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {30F80E7D-951A-4E8F-9C3C-2C866528EABD}.DIALOGFLOW|x64.ActiveCfg = DIALOGFLOW|x64 + {30F80E7D-951A-4E8F-9C3C-2C866528EABD}.DIALOGFLOW|x64.Build.0 = DIALOGFLOW|x64 {30F80E7D-951A-4E8F-9C3C-2C866528EABD}.Release|Any CPU.ActiveCfg = Release|Any CPU {30F80E7D-951A-4E8F-9C3C-2C866528EABD}.Release|Any CPU.Build.0 = Release|Any CPU {30F80E7D-951A-4E8F-9C3C-2C866528EABD}.Release|x64.ActiveCfg = Release|x64 @@ -74,6 +98,10 @@ Global {62F08F9F-16C2-4754-90B0-B604DC18AE23}.Debug|Any CPU.Build.0 = Debug|Any CPU {62F08F9F-16C2-4754-90B0-B604DC18AE23}.Debug|x64.ActiveCfg = Debug|Any CPU {62F08F9F-16C2-4754-90B0-B604DC18AE23}.Debug|x64.Build.0 = Debug|Any CPU + {62F08F9F-16C2-4754-90B0-B604DC18AE23}.DIALOGFLOW|Any CPU.ActiveCfg = Debug|Any CPU + {62F08F9F-16C2-4754-90B0-B604DC18AE23}.DIALOGFLOW|Any CPU.Build.0 = Debug|Any CPU + {62F08F9F-16C2-4754-90B0-B604DC18AE23}.DIALOGFLOW|x64.ActiveCfg = Debug|Any CPU + {62F08F9F-16C2-4754-90B0-B604DC18AE23}.DIALOGFLOW|x64.Build.0 = Debug|Any CPU {62F08F9F-16C2-4754-90B0-B604DC18AE23}.Release|Any CPU.ActiveCfg = Release|Any CPU {62F08F9F-16C2-4754-90B0-B604DC18AE23}.Release|Any CPU.Build.0 = Release|Any CPU {62F08F9F-16C2-4754-90B0-B604DC18AE23}.Release|x64.ActiveCfg = Release|Any CPU @@ -82,10 +110,26 @@ Global {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.Debug|Any CPU.Build.0 = Debug|Any CPU {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.Debug|x64.ActiveCfg = Debug|Any CPU {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.Debug|x64.Build.0 = Debug|Any CPU + {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.DIALOGFLOW|Any CPU.ActiveCfg = Debug|Any CPU + {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.DIALOGFLOW|Any CPU.Build.0 = Debug|Any CPU + {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.DIALOGFLOW|x64.ActiveCfg = Debug|Any CPU + {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.DIALOGFLOW|x64.Build.0 = Debug|Any CPU {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.Release|Any CPU.ActiveCfg = Release|Any CPU {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.Release|Any CPU.Build.0 = Release|Any CPU {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.Release|x64.ActiveCfg = Release|Any CPU {C4F2EAE5-F2C7-4F52-9DB2-7E76D7080C72}.Release|x64.Build.0 = Release|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.Debug|Any CPU.Build.0 = Debug|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.Debug|x64.ActiveCfg = Debug|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.Debug|x64.Build.0 = Debug|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.DIALOGFLOW|Any CPU.ActiveCfg = DIALOGFLOW|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.DIALOGFLOW|Any CPU.Build.0 = DIALOGFLOW|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.DIALOGFLOW|x64.ActiveCfg = DIALOGFLOW|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.DIALOGFLOW|x64.Build.0 = DIALOGFLOW|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.Release|Any CPU.ActiveCfg = Release|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.Release|Any CPU.Build.0 = Release|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.Release|x64.ActiveCfg = Release|Any CPU + {83D56CDD-7122-48D3-9CDC-BCE21CB10681}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE