Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions Iceoryx2.sln
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TaskCommunication", "exampl
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArrayOfStructs", "examples\ArrayOfStructs\ArrayOfStructs.csproj", "{3F880AD9-6564-44C4-BCE0-4B841AD46F4A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blackboard", "examples\Blackboard\Blackboard.csproj", "{9AE203AB-E8BB-45F0-8754-A7F63974931B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -283,6 +285,18 @@ Global
{3F880AD9-6564-44C4-BCE0-4B841AD46F4A}.Release|x64.Build.0 = Release|Any CPU
{3F880AD9-6564-44C4-BCE0-4B841AD46F4A}.Release|x86.ActiveCfg = Release|Any CPU
{3F880AD9-6564-44C4-BCE0-4B841AD46F4A}.Release|x86.Build.0 = Release|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Debug|x64.ActiveCfg = Debug|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Debug|x64.Build.0 = Debug|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Debug|x86.ActiveCfg = Debug|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Debug|x86.Build.0 = Debug|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Release|Any CPU.Build.0 = Release|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Release|x64.ActiveCfg = Release|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Release|x64.Build.0 = Release|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Release|x86.ActiveCfg = Release|Any CPU
{9AE203AB-E8BB-45F0-8754-A7F63974931B}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -305,5 +319,6 @@ Global
{B8D63E2A-B1F4-47A4-8793-B117D9649369} = {BC3A1E43-FC68-4656-A0AC-705B63F41D3C}
{7F8E9D0A-1B2C-3D4E-5F6A-7B8C9D0E1F2A} = {BC3A1E43-FC68-4656-A0AC-705B63F41D3C}
{3F880AD9-6564-44C4-BCE0-4B841AD46F4A} = {BC3A1E43-FC68-4656-A0AC-705B63F41D3C}
{9AE203AB-E8BB-45F0-8754-A7F63974931B} = {BC3A1E43-FC68-4656-A0AC-705B63F41D3C}
EndGlobalSection
EndGlobal
20 changes: 18 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
* ✅ **Event API** - Complete notifier/listener implementation with
blocking/timed waits
* ✅ **Request-Response API** - Complete client/server RPC with verified FFI signatures
* ✅ **Blackboard API** - Key-value store pattern for shared state monitoring
* ✅ **Complex Data Types** - Full support for custom structs with sequential layout
* ✅ **Async/Await Support** - Modern async methods for all blocking operations
with CancellationToken
Expand All @@ -38,7 +39,7 @@
* 🧹 **Memory-safe** - Automatic resource management via SafeHandle and IDisposable
* 🎯 **Idiomatic C#** - Builder pattern, Result types, LINQ-friendly APIs
* 🔧 **Cross-platform** - Works on Linux, macOS, and Windows
* 📦 **Multiple patterns** - Publish-Subscribe, Event, and Request-Response communication
* 📦 **Multiple patterns** - Publish-Subscribe, Event, Request-Response, and Blackboard communication

Check failure on line 42 in README.md

View workflow job for this annotation

GitHub Actions / Markdown Lint

Line length

README.md:42:81 MD013/line-length Line length [Expected: 80; Actual: 101] https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md013.md
* ⚡ **Async/Await** - Full async support with CancellationToken for modern C# applications
* 🔍 **Service Discovery** - Dynamically discover and monitor running services
* 🌐 **Domain Isolation** - Separate communication groups for multi-tenant deployments
Expand Down Expand Up @@ -77,13 +78,14 @@
### Services and Communication Patterns

iceoryx2 organizes communication through **services**. Each service has a unique
name and supports one of three communication patterns:
name and supports one of four communication patterns:

| Pattern | Description | Use Case |
|---------|-------------|----------|
| **Publish-Subscribe** | Many-to-many data distribution | Sensor data, telemetry, state broadcasts |
| **Event** | Lightweight notifications with event IDs | Wake-up signals, state changes, triggers |
| **Request-Response** | Client-server RPC | Commands, queries, configuration updates |
| **Blackboard** | Shared key-value store with latest values | State monitoring, configuration sharing, sensor fusion |

### Nodes

Expand Down Expand Up @@ -331,6 +333,18 @@
dotnet run -- listener
```

**Blackboard Example:**

```bash
# Terminal 1 - Run creator
cd examples/Blackboard
dotnet run -- creator

# Terminal 2 - Run opener
cd examples/Blackboard
dotnet run -- opener
```

### Alternative: Use the Build Script

A convenience build script is provided that handles all steps:
Expand Down Expand Up @@ -371,13 +385,15 @@
│ │ ├── PublishSubscribe/ # Pub/Sub messaging pattern
│ │ ├── Event/ # Event-based communication
│ │ ├── RequestResponse/ # Request-Response (RPC) pattern
│ │ ├── Blackboard/ # Blackboard key-value store pattern
│ │ └── Types/ # Common types and utilities
│ └── Iceoryx2.Reactive/ # Reactive Extensions support
├── examples/ # C# examples
│ ├── PublishSubscribe/ # Pub/Sub example
│ ├── ComplexDataTypes/ # Complex struct example
│ ├── Event/ # Event API example
│ ├── RequestResponse/ # Request-Response RPC example
│ ├── Blackboard/ # Blackboard key-value store example
│ ├── AsyncPubSub/ # Async/await patterns example
│ ├── WaitSetMultiplexing/ # Event multiplexing with WaitSet
│ └── ServiceDiscovery/ # Service discovery and monitoring
Expand Down
37 changes: 37 additions & 0 deletions examples/Blackboard/Blackboard.csproj
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you add a small Readme on how to run the example and what is happening there?
A link to https://ekxide.github.io/iceoryx2-book/main/fundamentals/messaging-patterns/blackboard.html would be help here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok...will do in the future

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dkroenke please wait with the review while it is still in DRAFT state

Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
</PropertyGroup>

<!-- Copy native library from Iceoryx2 output directory -->
<Target Name="CopyNativeLibrary" AfterTargets="Build">
<PropertyGroup>
<Iceoryx2OutputPath>../../src/Iceoryx2/bin/$(Configuration)/$(TargetFramework)</Iceoryx2OutputPath>
</PropertyGroup>
<!-- macOS -->
<Copy SourceFiles="$(Iceoryx2OutputPath)/libiceoryx2_ffi_c.dylib"
DestinationFolder="$(OutputPath)"
Condition="Exists('$(Iceoryx2OutputPath)/libiceoryx2_ffi_c.dylib')"
SkipUnchangedFiles="true" />
<!-- Linux -->
<Copy SourceFiles="$(Iceoryx2OutputPath)/libiceoryx2_ffi_c.so"
DestinationFolder="$(OutputPath)"
Condition="Exists('$(Iceoryx2OutputPath)/libiceoryx2_ffi_c.so')"
SkipUnchangedFiles="true" />
<!-- Windows -->
<Copy SourceFiles="$(Iceoryx2OutputPath)/iceoryx2_ffi_c.dll"
DestinationFolder="$(OutputPath)"
Condition="Exists('$(Iceoryx2OutputPath)/iceoryx2_ffi_c.dll')"
SkipUnchangedFiles="true" />
</Target>

<ItemGroup>
<ProjectReference Include="../../src/Iceoryx2/Iceoryx2.csproj" />
<ProjectReference Include="../../src/Iceoryx2.Reactive/Iceoryx2.Reactive.csproj" />
</ItemGroup>

</Project>
Loading
Loading