Browse Source

ws transport / multi mesh

main
gsd 4 months ago
parent
commit
bd407df27a
  1. 16
      service.py
  2. 7
      transport_ws.py
  3. 2
      ui/srv.conf

16
service.py

@ -130,12 +130,19 @@ class MeshApi(MeshArgsParse):
super().__init__(args) super().__init__(args)
self.app = FastAPI(lifespan=self.lifespan) self.app = FastAPI(lifespan=self.lifespan)
self.tasks = [] self.tasks = []
self.listeners = [] #[{"func": func, "args":[]}]
from authManager import AuthManager from authManager import AuthManager
self.authManager = AuthManager(args) self.authManager = AuthManager(args)
@asynccontextmanager @asynccontextmanager
async def lifespan(self, app: FastAPI): async def lifespan(self, app: FastAPI):
logger.info("web started, now create bg tasks") logger.info("web started")
logger.info("create mesh listeners")
for listener in self.listeners:
asyncio.create_task(listener["func"](*listener["args"]))
logger.info("now create bg tasks")
for task in self.tasks: for task in self.tasks:
asyncio.create_task(task()) asyncio.create_task(task())
yield yield
@ -244,11 +251,10 @@ class MeshCenter(MeshMultiListener, MeshApi, MongoDriver, MeshArgsParse):
traceback.print_exc() traceback.print_exc()
def buildBackgroundTasks(self): def buildBackgroundTasks(self):
#input queue #input queue #[{"func": func, "args":[]}]
for device in self.devices: for device in self.devices:
async def mL(): logger.debug("Append mesh listener", device)
await self.meshListener(device, self.queue) self.listeners.append({"func": self.meshListener, "args":[device, self.queue]})
self.tasks.append(mL)
#output #output
async def handlerTask(): async def handlerTask():

7
transport_ws.py

@ -1,4 +1,4 @@
from fastapi import FastAPI, WebSocket, WebSocketDisconnect from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Query
from threading import Thread from threading import Thread
import uvicorn import uvicorn
import asyncio import asyncio
@ -13,8 +13,9 @@ class WSTransport:
self.thread = None self.thread = None
self.app = FastAPI() self.app = FastAPI()
@self.app.websocket(self.path + "/{token}")
async def websocket_endpoint(*, websocket: WebSocket, token: str): @self.app.websocket(self.path)
async def websocket_endpoint(*, websocket: WebSocket, token: str = Query("")):
if token != self.token: if token != self.token:
return return

2
ui/srv.conf

@ -17,7 +17,7 @@ server {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} }
location /ws/0/ { location /ws/0 {
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;

Loading…
Cancel
Save