Added Websocket stuff

This commit is contained in:
2026-05-02 18:26:02 -04:00
parent 7f49abd5e1
commit f34125d67b
10 changed files with 140 additions and 102 deletions

73
main.py
View File

@@ -1,26 +1,65 @@
#All Rights Reserved John Salguero
#Starts the backend to my Youtube stream
import json
import asyncio
import logging
from problem_generator import generate_problem
from steps_generator import generate_steps
from sympy import init_printing, sympify
import time
import json
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
#define the entry point to the programs
def main():
init_printing(order='lex')
count = -1
no_problem = True
problem = generate_problem()
problem["steps"] = generate_steps(problem);
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
handlers=[
logging.FileHandler("app.log"),
logging.StreamHandler() # prints to console
]
)
log = logging.getLogger(__name__)
no_problem = check_solution(problem["steps"][-1]["after"], problem["solution"])
if no_problem:
with open("www/data/data.json", "w") as f:
json.dump(problem, f)
app = FastAPI()
clients = []
@app.websocket("/ws")
async def websocket_endpoint(ws: WebSocket):
await ws.accept()
clients.append(ws)
try:
while True:
data = json.loads(await ws.receive_text())
log.info(f"Received from browser: {data}")
if data.get("type") == "query_problem":
problem = generate_problem_message()
await ws.send_text(json.dumps(problem))
except WebSocketDisconnect:
log.info("Client disconnected")
except Exception as e:
log.error(f"Unexpected error: {e}")
finally:
if ws in clients:
clients.remove(ws)
# example loop
def generate_problem_message():
problem_solved = False
problem = {}
while not problem_solved:
problem["type"] = "generated_problem"
problem["data"] = generate_problem()
problem["data"]["steps"] = generate_steps(problem["data"]);
problem_solved = check_solution(problem["data"]["steps"][-1]["after"], problem["data"]["solution"])
if not problem_solved:
log.warning(f"issue with problem: {problem}")
return problem
def check_solution(got, solution):
values = set([sympify(r.split("=")[1].strip()) for r in got.split(",")])
@@ -53,8 +92,4 @@ def is_iterable(obj):
iter(obj)
return True
except TypeError:
return False
#Starts the program
if __name__ == "__main__":
main()
return False