diff --git a/examples/server/asgi/README.rst b/examples/server/asgi/README.rst index 73a462ff..bfcc834c 100644 --- a/examples/server/asgi/README.rst +++ b/examples/server/asgi/README.rst @@ -28,6 +28,16 @@ fiddle.py This is a very simple application based on a JavaScript example of the same name. +fastapi-fiddle.py +----------------- + +A version of `fiddle.py` that is integrated with the FastAPI framework. + +litestar-fiddle.py +------------------ + +A version of `fiddle.py` that is integrated with the Litestar framework. + Running the Examples -------------------- diff --git a/examples/server/asgi/fastapi-fiddle.py b/examples/server/asgi/fastapi-fiddle.py new file mode 100644 index 00000000..b6902e0d --- /dev/null +++ b/examples/server/asgi/fastapi-fiddle.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +from fastapi import FastAPI +from fastapi.responses import FileResponse +from fastapi.staticfiles import StaticFiles +import socketio +import uvicorn + +app = FastAPI() +app.mount('/static', StaticFiles(directory='static'), name='static') + +sio = socketio.AsyncServer(async_mode='asgi') +combined_asgi_app = socketio.ASGIApp(sio, app) + + +@app.get('/') +async def index(): + return FileResponse('fiddle.html') + + +@app.get('/hello') +async def hello(): + return {'message': 'Hello, World!'} + + +@sio.event +async def connect(sid, environ, auth): + print(f'connected auth={auth} sid={sid}') + await sio.emit('hello', (1, 2, {'hello': 'you'}), to=sid) + + +@sio.event +def disconnect(sid): + print('disconnected', sid) + + +if __name__ == '__main__': + uvicorn.run(combined_asgi_app, host='127.0.0.1', port=5000) diff --git a/examples/server/asgi/litestar-fiddle.py b/examples/server/asgi/litestar-fiddle.py new file mode 100644 index 00000000..9cd9a8af --- /dev/null +++ b/examples/server/asgi/litestar-fiddle.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python +from litestar import Litestar, get, MediaType +from litestar.response import File +from litestar.static_files.config import StaticFilesConfig +import socketio +import uvicorn + +sio = socketio.AsyncServer(async_mode='asgi') + + +@get('/', media_type=MediaType.HTML) +async def index() -> File: + return File('fiddle.html', content_disposition_type='inline') + + +@get('/hello') +async def hello() -> dict: + return {'message': 'Hello, World!'} + + +@sio.event +async def connect(sid, environ, auth): + print(f'connected auth={auth} sid={sid}') + await sio.emit('hello', (1, 2, {'hello': 'you'}), to=sid) + + +@sio.event +def disconnect(sid): + print('disconnected', sid) + + +app = Litestar([index, hello], static_files_config=[ + StaticFilesConfig('static', directories=['static'])]) +combined_asgi_app = socketio.ASGIApp(sio, app) + + +if __name__ == '__main__': + uvicorn.run(combined_asgi_app, host='127.0.0.1', port=5000)