swap to async #1
1 changed files with 29 additions and 19 deletions
|
@ -1,6 +1,7 @@
|
|||
"""
|
||||
MS Teams controller using a Neokey 1x4 and a RP2040.
|
||||
"""
|
||||
import logging
|
||||
import json
|
||||
import time
|
||||
import asyncio
|
||||
|
@ -8,7 +9,9 @@ from typing import Any
|
|||
import serial_asyncio
|
||||
from argparse import ArgumentParser
|
||||
from websockets.client import connect, WebSocketClientProtocol
|
||||
from pydantic import BaseModel
|
||||
from pydantic import BaseModel, ValidationError
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Button(BaseModel):
|
||||
|
@ -240,25 +243,32 @@ class TeamsCtrl:
|
|||
|
||||
async def process_ws(self) -> None:
|
||||
async for raw_msg in self.ws:
|
||||
msg = TeamsMsg.parse_raw(raw_msg)
|
||||
if self.meeting_state != msg.meetingUpdate.meetingState:
|
||||
print(
|
||||
f"state changed:\n{self.meeting_state}\nto\n{msg.meetingUpdate.meetingState}"
|
||||
)
|
||||
changes: dict[str, bool] = {}
|
||||
if self.meeting_state is None:
|
||||
changes = msg.meetingUpdate.meetingState.dict()
|
||||
try:
|
||||
msg = TeamsMsg.parse_raw(raw_msg)
|
||||
if self.meeting_state != msg.meetingUpdate.meetingState:
|
||||
log.debug(
|
||||
f"state changed:\n{self.meeting_state}\nto\n{msg.meetingUpdate.meetingState}"
|
||||
)
|
||||
changes: dict[str, bool] = {}
|
||||
if self.meeting_state is None:
|
||||
changes = msg.meetingUpdate.meetingState.dict()
|
||||
else:
|
||||
old_s = self.meeting_state.dict()
|
||||
new_s = msg.meetingUpdate.meetingState.dict()
|
||||
for state, old_v in old_s.items():
|
||||
new_v = new_s[state]
|
||||
if old_v != new_v:
|
||||
changes[state] = new_v
|
||||
next_state = self.current_state.handle_state_change(changes)
|
||||
self.meeting_state = msg.meetingUpdate.meetingState
|
||||
if next_state is not None:
|
||||
self.set_next_state(next_state=next_state)
|
||||
except ValidationError:
|
||||
if isinstance(raw_msg, bytes):
|
||||
m = raw_msg.decode("utf-8")
|
||||
else:
|
||||
old_s = self.meeting_state.dict()
|
||||
new_s = msg.meetingUpdate.meetingState.dict()
|
||||
for state, old_v in old_s.items():
|
||||
new_v = new_s[state]
|
||||
if old_v != new_v:
|
||||
changes[state] = new_v
|
||||
next_state = self.current_state.handle_state_change(changes)
|
||||
self.meeting_state = msg.meetingUpdate.meetingState
|
||||
if next_state is not None:
|
||||
self.set_next_state(next_state=next_state)
|
||||
m = raw_msg
|
||||
log.info(f"got unknown meetingState: {m}")
|
||||
|
||||
async def process_statemachine(self) -> None:
|
||||
while not self.loop.is_closed():
|
||||
|
|
Loading…
Reference in a new issue