Browse Source

ws transport

main
gsd 4 months ago
parent
commit
9472ae81db
  1. 11
      service.py
  2. 46
      transport_ws.py
  3. 9
      ui/srv.conf

11
service.py

@ -84,7 +84,10 @@ class MeshMultiListener(MeshArgsParse):
transport = BLETransport(device_config["address"], device_config["adapter"])
self.devices.append(MeshtDevice(transport, device_config['uuid']))
elif device_config["transport"] == "ws":
raise Exception("ws transport not impl")
logger.info("Found ws transport")
from transport_ws import WSTransport
transport = WSTransport(device_config["port"], device_config["uuid"])
self.devices.append(MeshtDevice(transport, device_config['uuid'], True))
#set default mesh
self.defaultDeviceUUID = self.json_config[0]["uuid"]
@ -189,8 +192,8 @@ class MongoDriver(MeshArgsParse):
else:
self.tryParseProtobuf(v)
if "decoded_payload_object" in v:
print(v["decoded_payload_object"])
#if "decoded_payload_object" in v:
# print(v["decoded_payload_object"])
except:
logger.error("Cannot decode protobuf: " + v.get("portnum", 0))
self.tryParseProtobuf(v)
@ -283,7 +286,7 @@ if __name__ == "__main__":
#mesh
parser.add_argument("--change-workdir", default=True, action="store_true")
parser.add_argument("--mesh-config", default="./config/mesh.json")
parser.add_argument("--disable-mesh", action="store_true", default=True)
parser.add_argument("--disable-mesh", action="store_true", default=False)
parser.add_argument("--enable-mesh", action="store_true", default=False, help="Need to run in docker if git is bullshit updates")
'''
parser.add_argument("--transport", default="tcp")

46
transport_ws.py

@ -0,0 +1,46 @@
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from threading import Thread
import uvicorn
import asyncio
#only rx
class WSTransport:
def __init__(self, port, t, path = "/ws/0"):
self.port = port
self.token = t
self.path = path
self._recv_q = asyncio.Queue()
self.thread = None
self.app = FastAPI()
@self.app.websocket(self.path + "/{token}")
async def websocket_endpoint(*, websocket: WebSocket, token: str):
if token != self.token:
return
await websocket.accept()
while True:
data = await websocket.receive_bytes()
await self._recv_q.put(data)
async def start(self):
if self.thread != None:
return
def run():
uvicorn.run(self.app, host="0.0.0.0", port = int(self.port))
self.thread = Thread(target=run, daemon=True)
self.thread.start()
async def recv(self):
item = await self._recv_q.get()
if item is None:
raise ConnectionError(self._error or "tcp transport error")
return item
async def send(self, payload):
pass
async def close(self):
pass

9
ui/srv.conf

@ -16,4 +16,13 @@ server {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /ws/0/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_pass http://meshcenterbackend:60000;
}
}

Loading…
Cancel
Save