Untitled
unknown
plain_text
a year ago
2.3 kB
13
Indexable
```py
import asyncio
import json
import websockets
from constants import SUPABASE_ID, SUPABASE_KEY, SUPABASE_URL
from supabase_auth import SupabaseClient
CHANNEL = "room-1"
WSS_URL = f"wss://{SUPABASE_ID}.supabase.co/realtime/v1/websocket?apikey={SUPABASE_KEY}&vsn=1.0.0"
supabaseClient = SupabaseClient()
response = supabaseClient.login("","")
async def send_heartbeat(websocket, interval=30):
while True:
await asyncio.sleep(interval)
await websocket.send(json.dumps({
"event": "heartbeat",
"topic": "phoenix",
"payload": {},
"ref": "heartbeat"
}))
print("Heartbeat sent")
async def connect_to_supabase():
async with websockets.connect(WSS_URL) as websocket:
# Authenticate
await websocket.send(json.dumps({
"event": "access_token",
"topic": "realtime:*",
"payload": {"access_token": response.session.access_token},
"ref": "1"
}))
# Subscribe to the channel with broadcast config
await websocket.send(json.dumps({
"event": "phx_join",
"topic": f"realtime:{CHANNEL}",
"payload": {
"config": {
"broadcast": {"self": False, "private": True}
}
},
"ref": "2"
}))
print(f"Subscribed to channel: {CHANNEL}")
# Start sending heartbeat messages
asyncio.create_task(send_heartbeat(websocket))
# Listen for messages
async for message in websocket:
data = json.loads(message)
handle_message(data)
def handle_message(data):
event = data.get("event")
if event == "broadcast":
payload = data.get("payload")
print(f"Received broadcast message: {payload}")
elif event == "phx_reply":
status = data.get("payload", {}).get("status")
print(f"Reply status: {status}")
elif event == "system":
status = data.get("payload", {}).get("status")
message = data.get("payload", {}).get("message")
print(f"System message - Status: {status}, Message: {message}")
else:
print(f"Received unhandled message: {data}")
# Run the event loop
asyncio.get_event_loop().run_until_complete(connect_to_supabase())
```Editor is loading...
Leave a Comment