Skip to main content
Markdown

Sending from your server

Your server sends to rooms and to users with its secret, the same way whether a browser or an app gets it (sending in depth).

To a room​

await realtime.to( 'order:1042' ).emit( 'updated', { status: 'shipped' } );
rt.join("order:1042").on("updated") { data, _ -> status = data.jsonObject["status"]?.jsonPrimitive?.content ?: status }

Not back to the app that caused it​

When the app asks your server to change something, it sends its own name on the connection, rt.tab, and your server leaves it out of the emit: the app has already shown the change.

val request = Request.Builder()
.url("$server/orders/1042/status")
.header("Authorization", "Bearer $token")
.header("X-Realtime-Tab", rt.tab)
.post(buildJsonObject { put("status", "shipped") }.toString().toRequestBody("application/json".toMediaType()))
.build()
await realtime.to( 'order:1042' ).except( req.get( 'x-realtime-tab' ) ).emit( 'updated', { status } );

To a user​

What only one user should get, on every page and app they have open, without a room of yours:

await realtime.toUser( 42 ).emit( 'notice', { text: 'Your order shipped' } );
rt.on("notice") { data, _ -> toast(data.jsonObject["text"]?.jsonPrimitive?.content ?: "") }
viewModelScope.launch { rt.events("notice").collect { (notice, _) -> toast(notice.toString()) } } // or as a flow

It reaches the app while it is connected. This SDK has no push yet: an app that is closed, or long in the background, hears it next time it opens only if it was also kept in the history of a room.

Webhooks​

What apps and pages send to rooms, and who comes online, reaches your server by webhook, as for your web pages (webhooks).