JetBrains / Rd
RD
Reactive Distributed communication framework for .NET, Kotlin and C++ (experimental). Inspired by JetBrains Rider IDE.
Structure
The framework contains several libraries for single process usage and cross-process communication.
Lifetimes
JetBrains Core library for graceful disposal, concurrency and reactive programming. For single-process usage.
-
Kotlin
-
.NET
RdFramework
JetBrains Networking library for reactive distributed communication
-
Kotlin
-
.NET
RdFramework.Reflection
Plugin for RdFramework used for defining models using regular C#
- .NET
RdGen
Rd Generator: generates stubs (Kotlin/C#/C++) classes by Kotlin DSL models
- Sources: https://github.com/JetBrains/rd/tree/master/rd-kt/rd-gen
- Gradle: https://www.myget.org/feed/rd-snapshots/package/maven/com.jetbrains.rd/rd-gen/0.201.40
- NuGet: https://www.nuget.org/packages/JetBrains.RdGen
How to build
Firstly decide which languages will be involved in the protocol. It may be Kotlin and C#, Rider uses them for instance. Or C++ only, who knows. After that prepare the environment and build needed assemblies. Choose separate or common build based on needs.
Separate build
.NET
Open solution in JetBrains Rider: https://github.com/JetBrains/rd/tree/master/rd-net/Rd.sln
Requirements
- .NET Framework >= 3.5
Console build instructions
dotnet build rd-net/Rd.sln
Kotlin
Open solution in IntellijIDEA: https://github.com/JetBrains/rd
Requirements
- Gradle 6.2.2
- Kotlin 1.3.61
Console build instructions
gradle :build -x test
C++ (experimental)
Open solution in JetBrains CLion: https://github.com/JetBrains/rd/rd-cpp
Requirements
- git
- cmake
- Visual Studio 2015+ or
- clang 6.0+
Console build instructions
cd rd-cpp
./build.cmd
or
gradle :rd-cpp:build -x test
Build everything
gradle build
Build NuGet packages instructions
To build packages locally please use: rd-kt/rd-gen/pack.sh
* Right now it works only on Linux. Please use Docker for Windows or macOS.
How to generate models (stubs)
Generate models in each language you have chosen. For this purpose project :rd-gen must be built.
Instruction
See https://www.jetbrains.com/help/resharper/sdk/Products/Rider.html#protocol-extension for more details.
More examples of models
See com.jetbrains.rd.generator.test.cases.generator.demo.DemoModel and com.jetbrains.rd.generator.test.cases.generator.example.ExampleModel
How to connect processes
Generally, it depends on the architecture. But in standard Client-Server architecture through localhost connection framework's classes are suitable.
C#
JetBrains.Rd.Impl.Server and *.Client respectively
Kotlin
com.jetbrains.rd.framework.Server and *.Client respectively
C++
rd::SocketWire::Server and *.Client respectively
Examples of connections
Look at cross tests
- com.jetbrains.rd.framework.test.cross at Kotlin side
- Test.RdCross at C# side
- rd::cross at C++ side