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://mvnrepository.com/artifact/com.jetbrains.rd/rd-gen
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.
Run tests (Kotlin part only)
On a local computer
Don't forget to set TEAMCITY_VERSION=1
(temporary measure for now) before running any tests.
$ ./gradlew build
In a Docker container
$ docker build . -t rd && docker rm rd && docker run -it --name rd rd
To run particular tests (e.g. :rd-gen:test
):
$ docker build . -t rd && docker rm rd && docker run -it --name rd rd --entrypoint ./gradlew :rd-gen:test
To extract test results afterwards:
$ docker cp rd:/rd/rd-kt/rd-gen/build/reports/ T:\Temp\reports
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
License
Rd is licensed under the Apache 2.0 license. Rd distributions may include third-party software licensed separately; see THIRD-PARTY-NOTICES for details.