Spaces:
Sleeping
Sleeping
Client Library API Comparison
This table shows the correspondence between the Python and JavaScript/TypeScript client libraries for RobotHub TransportServer.
π¦ Installation
Python | JavaScript/TypeScript |
---|---|
uv add transport-server-client |
bun add @robothub/transport-server-client |
π§ Imports
Python | JavaScript/TypeScript |
---|---|
from transport_server_client import RoboticsProducer |
import { robotics } from '@robothub/transport-server-client' |
from transport_server_client import RoboticsConsumer |
const producer = new robotics.RoboticsProducer() |
from transport_server_client.video import VideoProducer |
import { video } from '@robothub/transport-server-client' |
from transport_server_client.video import VideoConsumer |
const producer = new video.VideoProducer() |
π€ Robotics Producer
Operation | Python | JavaScript/TypeScript |
---|---|---|
Create instance | producer = RoboticsProducer('http://localhost:8000') |
const producer = new robotics.RoboticsProducer('http://localhost:8000') |
Connect to room | await producer.connect(workspace_id, room_id) |
await producer.connect(workspaceId, roomId) |
Create room | room_info = await producer.create_room() |
const { workspaceId, roomId } = await producer.createRoom() |
Send joint update | await producer.send_joint_update(joints) |
await producer.sendJointUpdate(joints) |
Send state sync | await producer.send_state_sync(state) |
await producer.sendStateSync(state) |
Emergency stop | await producer.send_emergency_stop(reason) |
await producer.sendEmergencyStop(reason) |
List rooms | rooms = await producer.list_rooms(workspace_id) |
const rooms = await producer.listRooms(workspaceId) |
Delete room | await producer.delete_room(workspace_id, room_id) |
await producer.deleteRoom(workspaceId, roomId) |
Disconnect | await producer.disconnect() |
await producer.disconnect() |
π€ Robotics Consumer
Operation | Python | JavaScript/TypeScript |
---|---|---|
Create instance | consumer = RoboticsConsumer('http://localhost:8000') |
const consumer = new robotics.RoboticsConsumer('http://localhost:8000') |
Connect to room | await consumer.connect(workspace_id, room_id) |
await consumer.connect(workspaceId, roomId) |
Get current state | state = await consumer.get_state_sync() |
const state = await consumer.getStateSyncAsync() |
Joint update callback | consumer.on_joint_update(callback) |
consumer.onJointUpdate(callback) |
State sync callback | consumer.on_state_sync(callback) |
consumer.onStateSync(callback) |
Error callback | consumer.on_error(callback) |
consumer.onError(callback) |
Connected callback | consumer.on_connected(callback) |
consumer.onConnected(callback) |
Disconnected callback | consumer.on_disconnected(callback) |
consumer.onDisconnected(callback) |
Disconnect | await consumer.disconnect() |
await consumer.disconnect() |
πΉ Video Producer
Operation | Python | JavaScript/TypeScript |
---|---|---|
Create instance | producer = VideoProducer('http://localhost:8000') |
const producer = new video.VideoProducer('http://localhost:8000') |
Connect to room | await producer.connect(workspace_id, room_id) |
await producer.connect(workspaceId, roomId) |
Start camera | await producer.start_camera(config) |
await producer.startCamera(constraints) |
Start screen share | await producer.start_screen_share() |
await producer.startScreenShare() |
Stop streaming | await producer.stop_streaming() |
await producer.stopStreaming() |
Update config | await producer.update_video_config(config) |
await producer.updateVideoConfig(config) |
Disconnect | await producer.disconnect() |
await producer.disconnect() |
πΉ Video Consumer
Operation | Python | JavaScript/TypeScript |
---|---|---|
Create instance | consumer = VideoConsumer('http://localhost:8000') |
const consumer = new video.VideoConsumer('http://localhost:8000') |
Connect to room | await consumer.connect(workspace_id, room_id) |
await consumer.connect(workspaceId, roomId) |
Start receiving | await consumer.start_receiving() |
await consumer.startReceiving() |
Stop receiving | await consumer.stop_receiving() |
await consumer.stopReceiving() |
Attach to video element | N/A (Python) | consumer.attachToVideoElement(videoElement) |
Frame callback | consumer.on_frame_update(callback) |
consumer.onFrameUpdate(callback) |
Stream started callback | consumer.on_stream_started(callback) |
consumer.onStreamStarted(callback) |
Stream stopped callback | consumer.on_stream_stopped(callback) |
consumer.onStreamStopped(callback) |
Disconnect | await consumer.disconnect() |
await consumer.disconnect() |
β‘ Factory Functions
Operation | Python | JavaScript/TypeScript |
---|---|---|
Quick producer | producer = await create_producer_client(url) |
const producer = await robotics.createProducerClient(url) |
Quick consumer | consumer = await create_consumer_client(room_id, url) |
const consumer = await robotics.createConsumerClient(workspaceId, roomId, url) |
π§ Context Managers / Lifecycle
Operation | Python | JavaScript/TypeScript |
---|---|---|
Auto cleanup | async with RoboticsProducer(url) as producer: |
No built-in equivalent |
Check connection | producer.is_connected() |
producer.isConnected() |
Connection info | info = producer.get_connection_info() |
const info = producer.getConnectionInfo() |
π Data Formats
Joint Data
Python | JavaScript/TypeScript |
---|---|
{'name': 'shoulder', 'value': 45.0} |
{ name: 'shoulder', value: 45.0 } |
[{'name': 'shoulder', 'value': 45.0}] |
[{ name: 'shoulder', value: 45.0 }] |
State Data
Python | JavaScript/TypeScript |
---|---|
{'shoulder': 45.0, 'elbow': -30.0} |
{ shoulder: 45.0, elbow: -30.0 } |
Room Info Response
Python | JavaScript/TypeScript |
---|---|
{'workspace_id': 'uuid', 'room_id': 'uuid'} |
{ workspaceId: 'uuid', roomId: 'uuid' } |
π Naming Conventions
Python (snake_case) | JavaScript/TypeScript (camelCase) |
---|---|
send_joint_update |
sendJointUpdate |
send_state_sync |
sendStateSync |
get_state_sync |
getStateSyncAsync |
on_joint_update |
onJointUpdate |
create_room |
createRoom |
list_rooms |
listRooms |
workspace_id |
workspaceId |
room_id |
roomId |
start_camera |
startCamera |
stop_streaming |
stopStreaming |
Both libraries provide the same functionality with language-appropriate conventions! π€β¨