/rd

Reactive Distributed communication framework for .NET, Kotlin, C++. Inspired by Rider IDE.

Primary LanguageC#Apache License 2.0Apache-2.0

RD

official JetBrains project Maven Central

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.

RdFramework

JetBrains Networking library for reactive distributed communication

RdFramework.Reflection

Plugin for RdFramework used for defining models using regular C#

RdGen

Rd Generator: generates stubs (Kotlin/C#/C++) classes by Kotlin DSL models

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.