|
| 1 | +import uuid |
| 2 | + |
| 3 | +from sanic.request import Request |
| 4 | +from sanic.views import HTTPMethodView |
| 5 | +from sanic.response import json |
| 6 | + |
| 7 | +from sse.core.request import get_group_id |
| 8 | + |
| 9 | + |
| 10 | +class EventListenView(HTTPMethodView): |
| 11 | + async def get(self, request: Request): |
| 12 | + sse = request.app.ctx.sse |
| 13 | + event = request.args.get("event") |
| 14 | + if not event: |
| 15 | + return json({"code": 1, "msg": "no event"}) |
| 16 | + client_id = uuid.uuid4() |
| 17 | + group_id = get_group_id(request) |
| 18 | + return sse.sse_stream(event, client_id, group_id) |
| 19 | + |
| 20 | + |
| 21 | +class EventSendView(HTTPMethodView): |
| 22 | + async def get(self, request: Request): |
| 23 | + sse = request.app.ctx.sse |
| 24 | + event = request.args.get("event") |
| 25 | + if not event: |
| 26 | + return json({"code": 1, "msg": "no event"}) |
| 27 | + remote_id = get_group_id(request) |
| 28 | + client_id = request.args.get("client_id") |
| 29 | + if not sse.is_registered(event, remote_id, client_id): |
| 30 | + return json({"code": 1, "msg": "not registered"}) |
| 31 | + data = { |
| 32 | + "info": f"hello, {event}" |
| 33 | + } |
| 34 | + event_id = uuid.uuid4().hex |
| 35 | + await sse.send(data, event=event, client_id=client_id, event_id=event_id) |
| 36 | + print(sse._register.get_events()) |
| 37 | + return json({"code": 0, "data": {"event": event, "data": data, "event_id": event_id}}) |
| 38 | + |
| 39 | + |
| 40 | +class EventTerminateView(HTTPMethodView): |
| 41 | + async def get(self, request: Request): |
| 42 | + sse = request.app.ctx.sse |
| 43 | + event = request.args.get("event") |
| 44 | + if not event: |
| 45 | + return json({"code": 1, "msg": "no event"}) |
| 46 | + client_id = request.args.get("client_id") |
| 47 | + group_id = get_group_id(request) |
| 48 | + if not sse.is_registered(event, client_id, group_id): |
| 49 | + return json({"code": 1, "msg": "not registered"}) |
| 50 | + await sse.terminate(event=event, client_id=client_id) |
| 51 | + return json({"code": 0, "msg": "success"}) |
0 commit comments