Python client for BUS/RT (sync)
Project description
Python sync client for BUS/RT
The module contains Python sync client for BUS/RT
Installation
pip3 install busrt
Usage examples
Listener
import busrt
import time
# frame handler
def on_frame(frame):
print('Frame:', hex(frame.type), frame.sender, frame.topic, frame.payload)
name = 'test.client.python.sync'
# create new BUS/RT client and connect
bus = busrt.client.Client('/tmp/busrt.sock', name)
bus.on_frame = on_frame
bus.connect()
# subscribe to all topics
bus.subscribe('#').wait_completed()
# wait for frames
print(f'listening for messages to {name}...')
while bus.is_connected():
time.sleep(0.1)
Sender
import busrt
name = 'test.client.python.sender'
bus = busrt.client.Client('/tmp/busrt.sock', name)
bus.connect()
# send a regular message
print(
hex(
bus.send('test.client.python.sync',
busrt.client.Frame('hello')).wait_completed()))
# send a broadcast message
print(
hex(
bus.send(
'test.*',
busrt.client.Frame('hello everyone',
tp=busrt.client.OP_BROADCAST)).wait_completed()))
# publish to a topic with zero QoS (no confirmation required)
bus.send('test/topic',
busrt.client.Frame('something', tp=busrt.client.OP_PUBLISH, qos=0))
RPC layer
Handler
import busrt
import time
import msgpack
# frame handler (topics/broadcasts)
def on_frame(frame):
print('Frame:', hex(frame.type), frame.sender, frame.topic, frame.payload)
# RPC notification handler
def on_notification(event):
print('Notification:', event.frame.sender, event.get_payload())
# RPC call handler
def on_call(event):
# consider payload is encoded in msgpack
print('Call:', event.frame.sender, event.method,
msgpack.loads(event.get_payload(), raw=False))
# msgpack reply
return msgpack.dumps({'ok': True})
name = 'test.client.python.sync.rpc'
# create new BUS/RT client and connect
bus = busrt.client.Client('/tmp/busrt.sock', name)
bus.connect()
# subscribe to all topics
bus.subscribe('#').wait_completed()
# init rpc
rpc = busrt.rpc.Rpc(bus)
rpc.on_frame = on_frame
rpc.on_notification = on_notification
rpc.on_call = on_call
# wait for frames
print(f'listening for messages/calls to {name}...')
while rpc.is_connected():
time.sleep(0.1)
Caller
import busrt
import msgpack
name = 'test.client.python.sync.rpc.caller'
# create new BUS/RT client and connect
bus = busrt.client.Client('/tmp/busrt.sock', name)
bus.connect()
# init rpc
rpc = busrt.rpc.Rpc(bus)
params = {'hello': 123}
# call a method, no reply required
rpc.call0('test.client.python.sync.rpc',
busrt.rpc.Request('test', msgpack.dumps(params))).wait_completed()
# call a method and wait for the reply
result = rpc.call('test.client.python.sync.rpc',
busrt.rpc.Request('test',
msgpack.dumps(params))).wait_completed()
print(msgpack.loads(result.get_payload(), raw=False))
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
busrt-0.1.0.tar.gz
(6.7 kB
view hashes)