diff --git a/Dockerfile b/Dockerfile index 220463a0..e8e0efe5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,9 @@ WORKDIR /app COPY ./Emulsion/Emulsion.fsproj ./Emulsion/ COPY ./Emulsion.ContentProxy/Emulsion.ContentProxy.fsproj ./Emulsion.ContentProxy/ COPY ./Emulsion.Database/Emulsion.Database.fsproj ./Emulsion.Database/ +COPY ./Emulsion.Messaging/Emulsion.Messaging.fsproj ./Emulsion.Messaging/ COPY ./Emulsion.Settings/Emulsion.Settings.fsproj ./Emulsion.Settings/ +COPY ./Emulsion.Telegram/Emulsion.Telegram.fsproj ./Emulsion.Telegram/ COPY ./Emulsion.Web/Emulsion.Web.fsproj ./Emulsion.Web/ RUN dotnet restore Emulsion diff --git a/Emulsion.Messaging/AssemblyInfo.fs b/Emulsion.Messaging/AssemblyInfo.fs new file mode 100644 index 00000000..ce988e12 --- /dev/null +++ b/Emulsion.Messaging/AssemblyInfo.fs @@ -0,0 +1,6 @@ +namespace Emulsion.Messaging + +open System.Runtime.CompilerServices + +[] +() diff --git a/Emulsion.Messaging/Emulsion.Messaging.fsproj b/Emulsion.Messaging/Emulsion.Messaging.fsproj new file mode 100644 index 00000000..f798991b --- /dev/null +++ b/Emulsion.Messaging/Emulsion.Messaging.fsproj @@ -0,0 +1,16 @@ + + + net6.0 + true + + + + + + + + + + + + diff --git a/Emulsion/Message.fs b/Emulsion.Messaging/Message.fs similarity index 93% rename from Emulsion/Message.fs rename to Emulsion.Messaging/Message.fs index 5ae487fd..8a012aa5 100644 --- a/Emulsion/Message.fs +++ b/Emulsion.Messaging/Message.fs @@ -1,4 +1,4 @@ -namespace Emulsion +namespace Emulsion.Messaging [] type AuthoredMessage = { diff --git a/Emulsion/MessageSender.fs b/Emulsion.Messaging/MessageSender.fs similarity index 98% rename from Emulsion/MessageSender.fs rename to Emulsion.Messaging/MessageSender.fs index 2776da23..97e661e5 100644 --- a/Emulsion/MessageSender.fs +++ b/Emulsion.Messaging/MessageSender.fs @@ -1,4 +1,4 @@ -module Emulsion.MessageSender +module Emulsion.Messaging.MessageSender open System open System.Threading diff --git a/Emulsion/MessageSystem.fs b/Emulsion.Messaging/MessageSystem.fs similarity index 98% rename from Emulsion/MessageSystem.fs rename to Emulsion.Messaging/MessageSystem.fs index 21802d05..01213a56 100644 --- a/Emulsion/MessageSystem.fs +++ b/Emulsion.Messaging/MessageSystem.fs @@ -1,4 +1,4 @@ -module Emulsion.MessageSystem +module Emulsion.Messaging.MessageSystem open System open System.Threading diff --git a/Emulsion/AssemblyInfo.fs b/Emulsion.Telegram/AssemblyInfo.fs similarity index 76% rename from Emulsion/AssemblyInfo.fs rename to Emulsion.Telegram/AssemblyInfo.fs index c8cba8ee..45906365 100644 --- a/Emulsion/AssemblyInfo.fs +++ b/Emulsion.Telegram/AssemblyInfo.fs @@ -1,4 +1,4 @@ -namespace Emulsion +namespace Emulsion.Telegram open System.Runtime.CompilerServices diff --git a/Emulsion/Telegram/Client.fs b/Emulsion.Telegram/Client.fs similarity index 95% rename from Emulsion/Telegram/Client.fs rename to Emulsion.Telegram/Client.fs index bf42b1ef..2f2d708b 100644 --- a/Emulsion/Telegram/Client.fs +++ b/Emulsion.Telegram/Client.fs @@ -3,7 +3,7 @@ namespace Emulsion.Telegram open System.Threading open Emulsion.Database -open Emulsion.MessageSystem +open Emulsion.Messaging.MessageSystem open Emulsion.Settings type Client(ctx: ServiceContext, diff --git a/Emulsion.Telegram/Emulsion.Telegram.fsproj b/Emulsion.Telegram/Emulsion.Telegram.fsproj new file mode 100644 index 00000000..a25ed85a --- /dev/null +++ b/Emulsion.Telegram/Emulsion.Telegram.fsproj @@ -0,0 +1,23 @@ + + + net6.0 + true + + + + + + + + + + + + + + + + + + + diff --git a/Emulsion/Telegram/Funogram.fs b/Emulsion.Telegram/Funogram.fs similarity index 99% rename from Emulsion/Telegram/Funogram.fs rename to Emulsion.Telegram/Funogram.fs index fbf7166b..a9edad6c 100644 --- a/Emulsion/Telegram/Funogram.fs +++ b/Emulsion.Telegram/Funogram.fs @@ -9,7 +9,7 @@ open Funogram.Api open Funogram.Types open Serilog -open Emulsion +open Emulsion.Messaging open Emulsion.Database open Emulsion.Settings open Emulsion.Telegram.LinkGenerator diff --git a/Emulsion/Telegram/Html.fs b/Emulsion.Telegram/Html.fs similarity index 100% rename from Emulsion/Telegram/Html.fs rename to Emulsion.Telegram/Html.fs diff --git a/Emulsion/Telegram/LinkGenerator.fs b/Emulsion.Telegram/LinkGenerator.fs similarity index 100% rename from Emulsion/Telegram/LinkGenerator.fs rename to Emulsion.Telegram/LinkGenerator.fs diff --git a/Emulsion.Tests/Actors/Core.fs b/Emulsion.Tests/Actors/Core.fs index 47127457..0ea58530 100644 --- a/Emulsion.Tests/Actors/Core.fs +++ b/Emulsion.Tests/Actors/Core.fs @@ -8,6 +8,7 @@ open Xunit.Abstractions open Emulsion open Emulsion.Actors +open Emulsion.Messaging open Emulsion.Tests.TestUtils type CoreTests(testOutput: ITestOutputHelper) as this = diff --git a/Emulsion.Tests/Actors/Telegram.fs b/Emulsion.Tests/Actors/Telegram.fs index 48d09871..28b496ad 100644 --- a/Emulsion.Tests/Actors/Telegram.fs +++ b/Emulsion.Tests/Actors/Telegram.fs @@ -6,7 +6,8 @@ open Xunit.Abstractions open Emulsion open Emulsion.Actors -open Emulsion.MessageSystem +open Emulsion.Messaging +open Emulsion.Messaging.MessageSystem open Emulsion.Tests.TestUtils type TelegramTest(testOutput: ITestOutputHelper) = diff --git a/Emulsion.Tests/Actors/Xmpp.fs b/Emulsion.Tests/Actors/Xmpp.fs index d1141f0f..24ac6de8 100644 --- a/Emulsion.Tests/Actors/Xmpp.fs +++ b/Emulsion.Tests/Actors/Xmpp.fs @@ -6,7 +6,8 @@ open Xunit.Abstractions open Emulsion open Emulsion.Actors -open Emulsion.MessageSystem +open Emulsion.Messaging +open Emulsion.Messaging.MessageSystem open Emulsion.Tests.TestUtils type XmppTest(testOutput: ITestOutputHelper) = diff --git a/Emulsion.Tests/MessageSenderTests.fs b/Emulsion.Tests/MessageSenderTests.fs index 51cc93a0..f0030c27 100644 --- a/Emulsion.Tests/MessageSenderTests.fs +++ b/Emulsion.Tests/MessageSenderTests.fs @@ -9,8 +9,8 @@ open Serilog.Sinks.TestCorrelator open Xunit open Xunit.Abstractions -open Emulsion -open Emulsion.MessageSender +open Emulsion.Messaging +open Emulsion.Messaging.MessageSender open Emulsion.Tests.TestUtils open Emulsion.Tests.TestUtils.Waiter diff --git a/Emulsion.Tests/MessageSystemTests/MessageSystemBaseTests.fs b/Emulsion.Tests/MessageSystemTests/MessageSystemBaseTests.fs index 61bcea64..6fb5b561 100644 --- a/Emulsion.Tests/MessageSystemTests/MessageSystemBaseTests.fs +++ b/Emulsion.Tests/MessageSystemTests/MessageSystemBaseTests.fs @@ -8,7 +8,8 @@ open Xunit open Xunit.Abstractions open Emulsion -open Emulsion.MessageSystem +open Emulsion.Messaging +open Emulsion.Messaging.MessageSystem open Emulsion.Tests.TestUtils open Emulsion.Tests.TestUtils.Waiter @@ -39,7 +40,7 @@ type MessageSystemBaseTests(testLogger: ITestOutputHelper) = } } // Start the system but don't let it to start the internal loop yet: - MessageSystem.putMessage messageSystem msg + putMessage messageSystem msg // No messages sent: waitForItemCount buffer 1 shortTimeout |> Assert.False @@ -76,7 +77,7 @@ type MessageSystemBaseTests(testLogger: ITestOutputHelper) = buffer.Add m } } - MessageSystem.putMessage messageSystem msg + putMessage messageSystem msg let messageReceiver = ignore let runningSystem = Task.Run(fun () -> (messageSystem :> IMessageSystem).RunSynchronously messageReceiver) diff --git a/Emulsion.Tests/MessageSystemTests/WrapRunTests.fs b/Emulsion.Tests/MessageSystemTests/WrapRunTests.fs index e034b649..8c1f00a6 100644 --- a/Emulsion.Tests/MessageSystemTests/WrapRunTests.fs +++ b/Emulsion.Tests/MessageSystemTests/WrapRunTests.fs @@ -6,8 +6,7 @@ open System.Threading open Serilog.Core open Xunit -open Emulsion -open Emulsion.MessageSystem +open Emulsion.Messaging.MessageSystem let private performTest expectedStage runBody = use cts = new CancellationTokenSource() @@ -22,7 +21,7 @@ let private performTest expectedStage runBody = } try - Async.RunSynchronously(MessageSystem.wrapRun context run, cancellationToken = cts.Token) + Async.RunSynchronously(wrapRun context run, cancellationToken = cts.Token) with | :? OperationCanceledException -> () diff --git a/Emulsion.Tests/Telegram/FunogramTests.fs b/Emulsion.Tests/Telegram/FunogramTests.fs index 7bb1ecff..ba0b9de3 100644 --- a/Emulsion.Tests/Telegram/FunogramTests.fs +++ b/Emulsion.Tests/Telegram/FunogramTests.fs @@ -7,7 +7,7 @@ open Funogram.Types open Serilog.Core open Xunit -open Emulsion +open Emulsion.Messaging open Emulsion.Telegram open Emulsion.Telegram.Funogram diff --git a/Emulsion.Tests/Xmpp/EmulsionXmppTests.fs b/Emulsion.Tests/Xmpp/EmulsionXmppTests.fs index 701f527c..1e7d894b 100644 --- a/Emulsion.Tests/Xmpp/EmulsionXmppTests.fs +++ b/Emulsion.Tests/Xmpp/EmulsionXmppTests.fs @@ -11,8 +11,9 @@ open SharpXMPP.XMPP.Client.Elements open Xunit open Xunit.Abstractions -open Emulsion.Settings open Emulsion +open Emulsion.Messaging +open Emulsion.Settings open Emulsion.Tests.TestUtils open Emulsion.Tests.Xmpp open Emulsion.Xmpp diff --git a/Emulsion.Tests/Xmpp/SharpXmppHelperTests.fs b/Emulsion.Tests/Xmpp/SharpXmppHelperTests.fs index 7c87f73f..c0e58369 100644 --- a/Emulsion.Tests/Xmpp/SharpXmppHelperTests.fs +++ b/Emulsion.Tests/Xmpp/SharpXmppHelperTests.fs @@ -6,11 +6,11 @@ open SharpXMPP.XMPP open SharpXMPP.XMPP.Client.Elements open Xunit -open Emulsion -open Emulsion.Xmpp.SharpXmppHelper.Attributes -open Emulsion.Xmpp.SharpXmppHelper.Elements +open Emulsion.Messaging open Emulsion.Tests.Xmpp open Emulsion.Xmpp +open Emulsion.Xmpp.SharpXmppHelper.Attributes +open Emulsion.Xmpp.SharpXmppHelper.Elements [] let ``Message body has a proper namespace``() = diff --git a/Emulsion.sln b/Emulsion.sln index 1c4da5bd..ab2ffc42 100644 --- a/Emulsion.sln +++ b/Emulsion.sln @@ -44,6 +44,10 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Emulsion.Web", "Emulsion.We EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Emulsion.Settings", "Emulsion.Settings\Emulsion.Settings.fsproj", "{88331E40-EF70-4AF1-99CA-8A849208CAB7}" EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Emulsion.Telegram", "Emulsion.Telegram\Emulsion.Telegram.fsproj", "{D21E6DD6-35A8-430B-9719-E044197650A2}" +EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Emulsion.Messaging", "Emulsion.Messaging\Emulsion.Messaging.fsproj", "{C8DC4049-250B-4E84-BC98-CFC0AF1632AF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -77,6 +81,14 @@ Global {88331E40-EF70-4AF1-99CA-8A849208CAB7}.Debug|Any CPU.Build.0 = Debug|Any CPU {88331E40-EF70-4AF1-99CA-8A849208CAB7}.Release|Any CPU.ActiveCfg = Release|Any CPU {88331E40-EF70-4AF1-99CA-8A849208CAB7}.Release|Any CPU.Build.0 = Release|Any CPU + {D21E6DD6-35A8-430B-9719-E044197650A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D21E6DD6-35A8-430B-9719-E044197650A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D21E6DD6-35A8-430B-9719-E044197650A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D21E6DD6-35A8-430B-9719-E044197650A2}.Release|Any CPU.Build.0 = Release|Any CPU + {C8DC4049-250B-4E84-BC98-CFC0AF1632AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C8DC4049-250B-4E84-BC98-CFC0AF1632AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8DC4049-250B-4E84-BC98-CFC0AF1632AF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C8DC4049-250B-4E84-BC98-CFC0AF1632AF}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {7D1ADF47-BF1C-4007-BB9B-08C283044467} = {973131E1-E645-4A50-A0D2-1886A1A8F0C6} diff --git a/Emulsion/Actors/Core.fs b/Emulsion/Actors/Core.fs index b430acb5..cabfcf83 100644 --- a/Emulsion/Actors/Core.fs +++ b/Emulsion/Actors/Core.fs @@ -3,7 +3,7 @@ module Emulsion.Actors.Core open Akka.Actor open Serilog -open Emulsion +open Emulsion.Messaging type CoreActor(logger: ILogger, factories: ActorFactories) as this = inherit ReceiveActor() diff --git a/Emulsion/Actors/Telegram.fs b/Emulsion/Actors/Telegram.fs index e8ef9c53..5c7f6b6d 100644 --- a/Emulsion/Actors/Telegram.fs +++ b/Emulsion/Actors/Telegram.fs @@ -3,13 +3,13 @@ open Akka.Actor open Serilog -open Emulsion -open Emulsion.MessageSystem +open Emulsion.Messaging +open Emulsion.Messaging.MessageSystem type TelegramActor(logger: ILogger, telegram: IMessageSystem) as this = inherit ReceiveActor() do logger.Information("Telegram actor starting ({Path})…", this.Self.Path) - do this.Receive(MessageSystem.putMessage telegram) + do this.Receive(putMessage telegram) let spawn (logger: ILogger) (telegram: IMessageSystem) (factory: IActorRefFactory) (name: string): IActorRef = logger.Information("Telegram actor spawning…") diff --git a/Emulsion/Actors/Xmpp.fs b/Emulsion/Actors/Xmpp.fs index 729c75b2..42f6b8d4 100644 --- a/Emulsion/Actors/Xmpp.fs +++ b/Emulsion/Actors/Xmpp.fs @@ -3,13 +3,13 @@ module Emulsion.Actors.Xmpp open Akka.Actor open Serilog -open Emulsion -open Emulsion.MessageSystem +open Emulsion.Messaging +open Emulsion.Messaging.MessageSystem type XmppActor(logger: ILogger, xmpp: IMessageSystem) as this = inherit ReceiveActor() do logger.Information("XMPP actor starting ({Path})…", this.Self.Path) - do this.Receive(MessageSystem.putMessage xmpp) + do this.Receive(putMessage xmpp) let spawn (logger: ILogger) (xmpp: IMessageSystem) diff --git a/Emulsion/Emulsion.fsproj b/Emulsion/Emulsion.fsproj index bae03f55..bea0a469 100644 --- a/Emulsion/Emulsion.fsproj +++ b/Emulsion/Emulsion.fsproj @@ -6,17 +6,9 @@ 2.0.2 - - - - - - - - @@ -32,9 +24,6 @@ - - - @@ -45,6 +34,8 @@ + + \ No newline at end of file diff --git a/Emulsion/Program.fs b/Emulsion/Program.fs index 71cdc01c..8b721c08 100644 --- a/Emulsion/Program.fs +++ b/Emulsion/Program.fs @@ -9,7 +9,7 @@ open Serilog open Emulsion.Actors open Emulsion.Database -open Emulsion.MessageSystem +open Emulsion.Messaging.MessageSystem open Emulsion.Settings open Emulsion.Web open Emulsion.Xmpp diff --git a/Emulsion/Xmpp/EmulsionXmpp.fs b/Emulsion/Xmpp/EmulsionXmpp.fs index 247b7ded..1b59b610 100644 --- a/Emulsion/Xmpp/EmulsionXmpp.fs +++ b/Emulsion/Xmpp/EmulsionXmpp.fs @@ -8,14 +8,15 @@ open Serilog open SharpXMPP.XMPP open Emulsion +open Emulsion.Messaging +open Emulsion.Messaging.MessageSystem open Emulsion.Settings -open Emulsion.MessageSystem open Emulsion.Xmpp.XmppClient let private shouldProcessMessage (settings: XmppSettings) message = let isGroup = SharpXmppHelper.isGroupChatMessage message let shouldSkip = lazy ( - SharpXmppHelper.isOwnMessage (settings.Nickname) message + SharpXmppHelper.isOwnMessage settings.Nickname message || SharpXmppHelper.isHistoricalMessage message || SharpXmppHelper.isEmptyMessage message ) diff --git a/Emulsion/Xmpp/SharpXmppHelper.fs b/Emulsion/Xmpp/SharpXmppHelper.fs index 35a21056..7aafa59d 100644 --- a/Emulsion/Xmpp/SharpXmppHelper.fs +++ b/Emulsion/Xmpp/SharpXmppHelper.fs @@ -9,7 +9,7 @@ open SharpXMPP.XMPP open SharpXMPP.XMPP.Client.Elements open SharpXMPP.XMPP.Client.MUC.Bookmarks.Elements -open Emulsion +open Emulsion.Messaging open Emulsion.Xmpp module Namespaces = diff --git a/Emulsion/Xmpp/XmppMessageSystem.fs b/Emulsion/Xmpp/XmppMessageSystem.fs index 8b692e66..7e1309f8 100644 --- a/Emulsion/Xmpp/XmppMessageSystem.fs +++ b/Emulsion/Xmpp/XmppMessageSystem.fs @@ -4,8 +4,8 @@ open System.Threading open JetBrains.Lifetimes -open Emulsion -open Emulsion.MessageSystem +open Emulsion.Messaging +open Emulsion.Messaging.MessageSystem open Emulsion.Settings type XmppMessageSystem(ctx: ServiceContext, cancellationToken: CancellationToken, settings: XmppSettings) =