BusComm Practice

main
syneffort 8 months ago
parent f9c1bb957f
commit fedccf327f
  1. 22
      BusCommPractice/BusCommPractice.sln
  2. 10
      BusCommPractice/BusCommPracticeConsoleApp/BusCommPracticeConsoleApp.csproj
  3. 9
      BusCommPractice/BusCommPracticeConsoleApp/Models/IMessageBus.cs
  4. 26
      BusCommPractice/BusCommPracticeConsoleApp/Models/MessageBus.cs
  5. 18
      BusCommPractice/BusCommPracticeConsoleApp/Models/Publisher.cs
  6. 18
      BusCommPractice/BusCommPracticeConsoleApp/Models/Subscriber.cs
  7. 27
      BusCommPractice/BusCommPracticeConsoleApp/Program.cs

@ -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

@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

@ -0,0 +1,9 @@
namespace BusCommPracticeConsoleApp.Models
{
public interface IMessageBus
{
void Subscribe(Action<string> subscriber);
void Unsubscribe(Action<string> subscriber);
void Publish(string message);
}
}

@ -0,0 +1,26 @@
namespace BusCommPracticeConsoleApp.Models
{
public class MessageBus : IMessageBus
{
private readonly List<Action<string>> _subscribers = new List<Action<string>>();
public void Publish(string message)
{
foreach (var subscriber in _subscribers)
{
subscriber(message);
}
}
public void Subscribe(Action<string> subscriber)
{
_subscribers.Add(subscriber);
}
public void Unsubscribe(Action<string> subscriber)
{
_subscribers.Remove(subscriber);
}
}
}

@ -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);
}
}
}

@ -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}");
}
}
}

@ -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();
}
}
Loading…
Cancel
Save