import asyncio
import os
from flowsdk import FlowMqttClient, TransportType
def on_message(topic: str, payload: bytes, qos: int):
print(f"📨 Received: {topic} -> {payload.decode('utf-8')} (QoS {qos})")
async def main():
print("🚀 Starting QUIC MQTT Client Example...")
keylog_file = os.environ.get("SSLKEYLOGFILE")
enable_key_log = keylog_file is not None
if enable_key_log:
print(f"🔑 TLS key logging enabled → {keylog_file}")
client = FlowMqttClient(
client_id="quic_test_client",
transport=TransportType.QUIC,
mqtt_version=5,
insecure_skip_verify=True, enable_key_log=enable_key_log,
on_message=on_message
)
try:
host = "broker.emqx.io"
port = 14567
print(f"🔌 Connecting to {host}:{port} via QUIC...")
await client.connect(host, port, server_name="broker.emqx.io")
print("✅ Connected!")
topic = "flowsdk/quic/test"
print(f"📡 Subscribing to {topic}...")
await client.subscribe(topic, qos=1)
print("✅ Subscribed!")
for i in range(3):
message = f"QUIC message {i+1}"
print(f"📤 Publishing: {message}")
await client.publish(topic, message.encode(), qos=1)
await asyncio.sleep(0.5)
print("⏳ Waiting for messages (5 seconds)...")
await asyncio.sleep(5)
print("👋 Disconnecting...")
await client.disconnect()
print("✅ Disconnected!")
except Exception as e:
print(f"❌ Error: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
asyncio.run(main())