/rd

Reactive Distributed communication framework for .net, kotlin, js. Inspired by Rider IDE.

Primary LanguageC#Apache License 2.0Apache-2.0

RD official JetBrains project

Reactive Distributed communication framework for .NET, Kotlin and C++ (experimental). Inspired by JetBrains Rider IDE.

Structure

The framework contains of 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

RdGen

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

How to build

Firstly decide which languages will be involved in 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