import zenoh
import time
import sys
def main():
print("=== External Zenoh Subscriber ===\n")
print("Demonstrating interoperability with hiroz Protobuf encoding\n")
conf = zenoh.Config()
session = zenoh.open(conf)
print("Zenoh session opened")
print("\nSubscribing to:")
print(" - /interop/protobuf (expects Protobuf encoding)")
print(" - /interop/cdr (expects CDR encoding)")
print("\nWaiting for messages...\n")
def protobuf_callback(sample):
encoding = sample.encoding
payload = sample.payload.to_bytes()
print("[PROTO] Received message")
print(f" Encoding: {encoding}")
print(f" Payload size: {len(payload)} bytes")
print(f" Raw data: {payload[:50]}...")
if "schema=" in str(encoding):
schema = str(encoding).split("schema=")[1]
print(f" Schema: {schema}")
print()
def cdr_callback(sample):
encoding = sample.encoding
payload = sample.payload.to_bytes()
print("[CDR] Received message")
print(f" Encoding: {encoding}")
print(f" Payload size: {len(payload)} bytes")
print(f" Raw data: {payload[:50]}...") print()
sub_proto = session.declare_subscriber("/interop/protobuf", protobuf_callback)
sub_cdr = session.declare_subscriber("/interop/cdr", cdr_callback)
print("✓ Subscriptions active\n")
print("Press Ctrl+C to exit\n")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("\n\nShutting down...")
sub_proto.undeclare()
sub_cdr.undeclare()
session.close()
print("=== Complete ===")
if __name__ == "__main__":
try:
main()
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
sys.exit(1)