Skip to content
/ rd Public

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

License

Notifications You must be signed in to change notification settings

JetBrains/rd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,384 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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/HEAD/rd-net/Rd.sln

Requirements

  • .NET Framework >= 3.5

Console build instructions

  • dotnet build rd-net/Rd.sln

Kotlin

Open the project in IntelliJ IDEA: https://github.com/JetBrains/rd

Requirements

  • Gradle 6.2.2
  • Kotlin 1.3.61

Console build instructions

  • ./gradlew :build -x test

C++ (experimental)

Open the project in CLion: https://github.com/JetBrains/rd/tree/HEAD/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

  • ./gradlew 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/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.

About

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

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

 
 
 

Contributors 52