Skip to contents

Create a streaming reactive for real-time payload updates

Usage

payload_stream(
  path = "/ingress",
  session,
  filter_func = NULL,
  transform_func = NULL,
  intervalMillis = 100,
  max_items = 50
)

Arguments

path

The URL path used in payload_ui() or payload_methods() (default "/ingress")

session

The Shiny session object

filter_func

Optional function to filter payloads. Should return TRUE to include payload

transform_func

Optional function to transform payloads before returning

intervalMillis

Polling interval in milliseconds (default 100 for real-time)

max_items

Maximum number of items to keep in stream (default 50)

Value

A reactive expression that returns a list of recent payloads matching the filter

Examples

if (interactive()) {
  server <- function(input, output, session) {
    # Stream all payloads
    all_stream <- payload_stream("/api/data", session)

    # Stream only error events
    error_stream <- payload_stream("/api/data", session,
      filter_func = function(payload) {
        !is.null(payload$payload$level) && payload$payload$level == "error"
      }
    )

    # Stream with transformation
    temp_stream <- payload_stream("/api/sensors", session,
      filter_func = function(payload) {
        !is.null(payload$payload$type) && payload$payload$type == "temperature"
      },
      transform_func = function(payload) {
        list(
          timestamp = payload$meta$timestamp,
          temp_celsius = payload$payload$value,
          temp_fahrenheit = payload$payload$value * 9/5 + 32
        )
      }
    )
  }
}