Reactive Distributed communication framework for .NET, Kotlin and C++ (experimental). Inspired by JetBrains Rider IDE.
The framework contains several libraries for single process usage and cross-process communication.
JetBrains Core library for graceful disposal, concurrency and reactive programming. For single-process usage.
-
Kotlin
-
.NET
JetBrains Networking library for reactive distributed communication
-
Kotlin
-
.NET
Plugin for RdFramework used for defining models using regular C#
- .NET
Rd Generator: generates stubs (Kotlin/C#/C++) classes by Kotlin DSL models
- Sources: https://github.com/JetBrains/rd/tree/HEAD/rd-kt/rd-gen
- Gradle: https://mvnrepository.com/artifact/com.jetbrains.rd/rd-gen
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.
Open solution in JetBrains Rider: https://github.com/JetBrains/rd/tree/HEAD/rd-net/Rd.sln
- .NET Framework >= 3.5
dotnet build rd-net/Rd.sln
Open the project in IntelliJ IDEA: https://github.com/JetBrains/rd
- Gradle 6.2.2
- Kotlin 1.3.61
./gradlew :build -x test
Open the project in CLion: https://github.com/JetBrains/rd/tree/HEAD/rd-cpp
- git
- cmake
- Visual Studio 2015+ or
- clang 6.0+
cd rd-cpp
./build.cmd
or
gradle :rd-cpp:build -x test
./gradlew build
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.
Don't forget to set TEAMCITY_VERSION=1
(temporary measure for now) before running any tests.
$ ./gradlew build
$ 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
Generate models in each language you have chosen. For this purpose project :rd-gen must be built.
See https://www.jetbrains.com/help/resharper/sdk/Rider.html#protocol-extension for more details.
See com.jetbrains.rd.generator.test.cases.generator.demo.DemoModel and com.jetbrains.rd.generator.test.cases.generator.example.ExampleModel
Generally, it depends on the architecture. But in standard Client-Server architecture through localhost connection framework's classes are suitable.
JetBrains.Rd.Impl.Server and *.Client respectively
com.jetbrains.rd.framework.Server and *.Client respectively
rd::SocketWire::Server and *.Client respectively
Look at cross tests
- com.jetbrains.rd.framework.test.cross at Kotlin side
- Test.RdCross at C# side
- rd::cross at C++ side
Rd is licensed under the Apache 2.0 license. Rd distributions may include third-party software licensed separately; see THIRD-PARTY-NOTICES for details.