Rainway Network
Rainway Network
The Rainway Network is how apps using Rainway find each other.
Each entity connected to the network is a Peer, identified by its Rainway Peer ID.
Peers on the Rainway Network exchange connection requests and session information in order to establish a peer-to-peer connection. Once a connection between Peers has been established, they no longer use the Rainway Network to communicate.
First steps
Connecting to the Rainway Network happens automatically when you initialize RainwayRuntime
.
RainwayRuntime
is your way into the Rainway SDK. To initialize it, you must provide some configuration values and handlers through which Rainway and your app will communicate. This is done using the initialize
static method on Rainway::Runtime
.
You can leave all the handlers empty for now. Just make sure you provide your apiKey
.
By the way,
externalId
is a string identifying a user or entity within your app. This way you can easily tie an incoming connection back to a user in your app.
#include "rainwaysdk.h"
Rainway::Config config {
"your-organization's-api-key", // apiKey
"alice123" // externalId
};
config.logSink = [](auto level, const auto &target, const auto &message) {};
config.onRuntimeConnectionLost = [this](const auto error);
config.onConnectionRequest = [this](const auto &request) {};
config.onPeerStateChange = [this](auto &peer, const auto &state) {};
config.onPeerMessage = [this](auto &peer, const auto &channel, const auto *data, const auto len) {};
config.onPeerDataChannel = [this](auto &peer, auto &channel, auto mode) {};
config.onPeerError = [this](auto &peer, const auto error) {};
config.onStreamRequest = [this](const auto &request) {};
config.onStreamAnnouncement = [this](auto &peer, auto stream) {};
config.onStreamStop = [this](auto &peer, auto stream) {};
auto runtimePromise = Rainway::Runtime::initialize(config);
runtimePromise.wait();
if (auto resolved = runtimePromise.get())
{
runtime = std::move(*resolved);
// use the runtime
}
else
{
printf("Runtime failed to load\n");
}
Afterwards, runtime
is ready to use. It's time to get connected peer-to-peer!
Peer IDs
The first time RainwayRuntime is initialized on a device, it generates and stores a Peer ID. This is a 63-bit number that uniquely identifies the device on the Rainway Network.
To connect your device to another over Rainway, you must know the other's Peer ID. A device's Peer ID is exposed through the peerId
property on RainwayRuntime.
auto peerId = runtime->peerId();
How you store Peer IDs will vary depending on how your application uses Rainway. For example, you could store them in your application database to let Peers know about each other.
Connecting to a Peer
Once you have a Peer's ID, you can call connect
to establish the connection:
auto connectPromise = runtime->connect(remotePeerId);
connectPromise.wait();
if (auto resolved = connectPromise.wait())
{
auto peer = *resolved;
}
This promise will resolve once the Peer has accepted your connection request.
To test against the example web app, try running it on another device, and connecting from your web app to its Peer ID.
Multiple Peers
Rainway lets you connect to multiple Peers at a time. The Peers
property on RainwayRuntime
tracks every currently connected RainwayPeer
, mapped by their Peer IDs.
Updated over 2 years ago