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.2.tar.gz
(6.7 kB
view details)
File details
Details for the file busrt-0.1.2.tar.gz
.
File metadata
- Download URL: busrt-0.1.2.tar.gz
- Upload date:
- Size: 6.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.26.0 setuptools/60.5.0 requests-toolbelt/0.9.1 tqdm/4.64.1 CPython/3.8.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | db2a8193bbf54db8184f8d2002d8569b2c7cbbc39e46d90f1c2a88758451d609 |
|
MD5 | aedeb35897b771c1166393ff4e622ddb |
|
BLAKE2b-256 | c55eacc91a119e22e2172b6347fe4b74395e7652fba4cabc06ac605aa15d1447 |