import socketio
import uvicorn
from fastapi import FastAPI

# Create FastAPI app
app = FastAPI()

# Create Socket.IO server
sio = socketio.AsyncServer(async_mode='asgi')
app_sio = socketio.ASGIApp(sio, app)

# Socket.IO events
@sio.event
async def connect(sid, environ):
    print('Client connected:', sid)

@sio.event
async def disconnect(sid):
    print('Client disconnected:', sid)

@sio.event
async def join_room(sid, data):
    room = data['room']
    sio.enter_room(sid, room)
    await sio.emit('message', {'msg': f'{sid} has joined the room {room}'}, room=room)

# Run the Socket.IO server
if __name__ == "__main__":
    uvicorn.run(app_sio, host='0.0.0.0', port=8068)