Skip to content

Stream Methods

The stream system is used for real-time data streams. It has two main directions:

  • listenData - Listen to data coming from the platform
  • sendData - Send data to the platform

Core Concepts

StreamEmitter

When a stream is started, a StreamEmitter object is returned. You can listen to events and stop the stream through this object.

js
// StreamEmitter API
emitter.on(eventName, handler)    // Listen to event, returns unsubscribe function
emitter.off(eventName, handler)   // Stop listening to event
emitter.stop(reason)              // Stop the stream
emitter.id                        // Stream ID
emitter.stream                    // Stream name

Stream Events

EventDescription
dataWhen new data arrives
stream.acceptedWhen the stream is accepted
stream.startedWhen the stream starts
stream.endWhen the stream ends
stream.errorWhen an error occurs
errorError (short form)
endEnd (short form)

listenData

Starts listening to a stream. Receives real-time data from the platform.

js
const emitter = await gameTegra.listenData({
  stream: 'game-events',
  options: { roomId: 'room-123' }
})

// When data arrives
emitter.on('data', (payload) => {
  console.log('New data:', payload)
})

// When stream starts
emitter.on('stream.started', (payload) => {
  console.log('Stream started:', payload)
})

// On error
emitter.on('error', (err) => {
  console.error('Stream error:', err)
})

// When stream ends
emitter.on('end', () => {
  console.log('Stream ended')
})
csharp
var emitter = await gameTegra.listenStreamData(
    gameTegra.@params("stream", "game-events")
);

emitter.On("data", (payload) => {
    Debug.Log($"New data: {payload}");
});

emitter.On("stream.started", (payload) => {
    Debug.Log("Stream started");
});

// To stop the stream
await emitter.StopAsync("finished");
gdscript
var emitter = await gameTegra.listenData({
    "stream": "game-events",
    "options": { "roomId": "room-123" }
})

# Listen to data
emitter.on("data", func(payload):
    print("New data: ", payload)
)

# When stream starts
emitter.on("stream.started", func(payload):
    print("Stream started: ", payload)
)

# Stop the stream
await emitter.stop("finished")

Parameters:

FieldTypeRequiredDescription
streamstringYesStream name to listen to
channelstringNoAlternative: channel name
namestringNoAlternative: stream name
topicstringNoAlternative: topic name
optionsobjectNoAdditional stream-specific parameters

Note: One of stream, channel, name, or topic fields can be used.

Return Type: StreamEmitter


sendData

Sends data to the platform. Starts a stream, pushes data and automatically closes it.

js
const result = await gameTegra.sendData({
  stream: 'player-action',
  payload: {
    action: 'move',
    x: 100,
    y: 200
  }
})
csharp
await gameTegra.sendStreamData(
    gameTegra.@params(
        "stream", "player-action",
        "payload", gameTegra.@params("action", "move", "x", 100, "y", 200)
    )
);
gdscript
var result = await gameTegra.sendData({
    "stream": "player-action",
    "payload": {
        "action": "move",
        "x": 100,
        "y": 200
    }
})

Parameters:

FieldTypeRequiredDescription
streamstringYesTarget stream name
payloadobject/arrayNoData to send
dataobject/arrayNoAlternative: data to send
messageobjectNoAlternative: single message
messagesarrayNoAlternative: multiple messages
autoStopbooleanNoAutomatically close stream after sending (default: true)
keystringNoStream key

connectGame

Connects to a game stream. Shortcut for listenData.

js
const emitter = await gameTegra.connectGame('my-game-stream')

emitter.on('data', (payload) => {
  console.log('Game data:', payload)
})
csharp
var emitter = await gameTegra.connectToGameStream("my-game-stream");

emitter.On("data", (payload) => {
    Debug.Log($"Game data: {payload}");
});
gdscript
var emitter = await gameTegra.connectGame("my-game-stream")

emitter.on("data", func(payload):
    print("Game data: ", payload)
)

Parameters:

FieldTypeRequiredDescription
streamNamestringYesName of the game stream to connect to

Return Type: StreamEmitter


stopStream

Stops an active stream.

js
// Via emitter
emitter.stop('user_left')

// or via SDK
await gameTegra.stopStream(emitter)
// or with key
await gameTegra.stopListeningStream('stream-key')
csharp
// Via emitter
await emitter.StopAsync("user_left");

// or via SDK
await gameTegra.stopStream();
gdscript
# Via emitter
await emitter.stop("user_left")

# or via SDK
await gameTegra.stopStream("stream-id", "user_left")

getGyroscope

Listens to the device's gyroscope sensor data in real-time.

js
const emitter = await gameTegra.getGyroscope()

emitter.on('data', (gyroData) => {
  console.log('Gyro:', gyroData)
  // { alpha: 0.5, beta: -0.3, gamma: 0.1 }
})
csharp
var emitter = await gameTegra.getGyroscope();

emitter.On("data", (gyroData) => {
    Debug.Log($"Gyro: {gyroData}");
});
gdscript
var emitter = await gameTegra.getGyroscope()

emitter.on("data", func(gyro_data):
    print("Gyro: ", gyro_data)
)

Return Type: StreamEmitter - Continuously receives gyroscope data via the data event.


getAccelerometer

Listens to the device's accelerometer sensor data in real-time.

js
// Available in JS SDK and Godot only
gdscript
var emitter = await gameTegra.getAccelerometer()

emitter.on("data", func(accel_data):
    print("Accelerometer: ", accel_data)
)

Return Type: StreamEmitter


Stream Lifecycle

1. listenData() is called
   -> Stream request is sent to the platform

2. "ready" event arrives
   -> Promise resolves, StreamEmitter is returned

3. "stream.accepted" -> Stream accepted
4. "stream.started"  -> Stream active, data starts flowing
5. "data"            -> Triggered for each new data packet

6. Termination:
   - emitter.stop() -> "end" event
   - Closed by platform -> "stream.end" event
   - On error -> "stream.error" / "error" event