diff --git a/BusCommPractice/BusCommPractice.sln b/BusCommPractice/BusCommPractice.sln new file mode 100644 index 0000000..91cb806 --- /dev/null +++ b/BusCommPractice/BusCommPractice.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BusCommPracticeConsoleApp", "BusCommPracticeConsoleApp\BusCommPracticeConsoleApp.csproj", "{774DE3C5-A5D0-4130-B696-AA8E6D924EB0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {774DE3C5-A5D0-4130-B696-AA8E6D924EB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {774DE3C5-A5D0-4130-B696-AA8E6D924EB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {774DE3C5-A5D0-4130-B696-AA8E6D924EB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {774DE3C5-A5D0-4130-B696-AA8E6D924EB0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/BusCommPractice/BusCommPracticeConsoleApp/BusCommPracticeConsoleApp.csproj b/BusCommPractice/BusCommPracticeConsoleApp/BusCommPracticeConsoleApp.csproj new file mode 100644 index 0000000..2150e37 --- /dev/null +++ b/BusCommPractice/BusCommPracticeConsoleApp/BusCommPracticeConsoleApp.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/BusCommPractice/BusCommPracticeConsoleApp/Models/IMessageBus.cs b/BusCommPractice/BusCommPracticeConsoleApp/Models/IMessageBus.cs new file mode 100644 index 0000000..2db6394 --- /dev/null +++ b/BusCommPractice/BusCommPracticeConsoleApp/Models/IMessageBus.cs @@ -0,0 +1,9 @@ +namespace BusCommPracticeConsoleApp.Models +{ + public interface IMessageBus + { + void Subscribe(Action subscriber); + void Unsubscribe(Action subscriber); + void Publish(string message); + } +} \ No newline at end of file diff --git a/BusCommPractice/BusCommPracticeConsoleApp/Models/MessageBus.cs b/BusCommPractice/BusCommPracticeConsoleApp/Models/MessageBus.cs new file mode 100644 index 0000000..a083c5b --- /dev/null +++ b/BusCommPractice/BusCommPracticeConsoleApp/Models/MessageBus.cs @@ -0,0 +1,26 @@ + +namespace BusCommPracticeConsoleApp.Models +{ + public class MessageBus : IMessageBus + { + private readonly List> _subscribers = new List>(); + + public void Publish(string message) + { + foreach (var subscriber in _subscribers) + { + subscriber(message); + } + } + + public void Subscribe(Action subscriber) + { + _subscribers.Add(subscriber); + } + + public void Unsubscribe(Action subscriber) + { + _subscribers.Remove(subscriber); + } + } +} \ No newline at end of file diff --git a/BusCommPractice/BusCommPracticeConsoleApp/Models/Publisher.cs b/BusCommPractice/BusCommPracticeConsoleApp/Models/Publisher.cs new file mode 100644 index 0000000..db8b686 --- /dev/null +++ b/BusCommPractice/BusCommPracticeConsoleApp/Models/Publisher.cs @@ -0,0 +1,18 @@ +namespace BusCommPracticeConsoleApp.Models +{ + public class Publisher + { + private readonly IMessageBus _messageBus; + + public Publisher(IMessageBus messageBus) + { + _messageBus = messageBus; + } + + public void SendMessage(string message) + { + Console.WriteLine($"[LOG] Publisher: Sending Message - {message}"); + _messageBus.Publish(message); + } + } +} \ No newline at end of file diff --git a/BusCommPractice/BusCommPracticeConsoleApp/Models/Subscriber.cs b/BusCommPractice/BusCommPracticeConsoleApp/Models/Subscriber.cs new file mode 100644 index 0000000..b81db67 --- /dev/null +++ b/BusCommPractice/BusCommPracticeConsoleApp/Models/Subscriber.cs @@ -0,0 +1,18 @@ +namespace BusCommPracticeConsoleApp.Models +{ + public class Subscriber + { + private readonly string _name; + + public Subscriber(IMessageBus messageBus, string name) + { + _name = name; + messageBus.Subscribe(ReceiveMessage); + } + + private void ReceiveMessage(string message) + { + Console.WriteLine($"{_name}: Received Message - {message}"); + } + } +} \ No newline at end of file diff --git a/BusCommPractice/BusCommPracticeConsoleApp/Program.cs b/BusCommPractice/BusCommPracticeConsoleApp/Program.cs new file mode 100644 index 0000000..c30bf2d --- /dev/null +++ b/BusCommPractice/BusCommPracticeConsoleApp/Program.cs @@ -0,0 +1,27 @@ +using BusCommPracticeConsoleApp.Models; + +namespace BusCommPracticeConsoleApp; + +class Program +{ + static void Main(string[] args) + { + IMessageBus messageBus1= new MessageBus(); + IMessageBus messageBus2= new MessageBus(); + + var subscriber1 = new Subscriber(messageBus1, "Sub1"); + var subscriber2 = new Subscriber(messageBus1, "Sub2"); + var subscriber3 = new Subscriber(messageBus2, "Sub3"); + + var publisher1 = new Publisher(messageBus1); + var publisher2 = new Publisher(messageBus2); + + publisher1.SendMessage("Hello, Bus!"); + publisher1.SendMessage("I'm publisher 1"); + + publisher2.SendMessage("Hello, Bus!"); + publisher2.SendMessage("I'm publisher 2"); + + Console.ReadLine(); + } +}