From bf2e1e347f1f0be5d7b2aee17e5f2b25648e241f Mon Sep 17 00:00:00 2001 From: Byte Dice Date: Sat, 8 Feb 2025 16:16:55 +0100 Subject: [PATCH] FINALLY MADE WEBSOCKETS WORK AAAAAAAAAAAAAAAAA --- help.txt | 13 ------------- src/macros.rs | 4 ++-- src/python.rs | 6 +++--- src/python/main.py | 17 +++++++++++------ src/python/py_websocket.py | 14 ++++++++++++-- src/websocket.rs | 1 - 6 files changed, 28 insertions(+), 27 deletions(-) delete mode 100644 help.txt diff --git a/help.txt b/help.txt deleted file mode 100644 index 109e3fa..0000000 --- a/help.txt +++ /dev/null @@ -1,13 +0,0 @@ ---- Run command --- -cargo run [-- {options}] - -Examples: -cargo run -cargo run -- --dev -cargo run -- --py --dev - ---- Options: --- ---h, --help - View this text. ---dev - Run in dev mode. Disables certain security measures. ---rs - Only run the Rust portion of the program. ---py - Only run the Python portion of the program. \ No newline at end of file diff --git a/src/macros.rs b/src/macros.rs index 819226c..01765f1 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -19,7 +19,7 @@ macro_rules! rs_errln { "\x1b[0m", format!($($arg)*) ); - process::exit(-1); + process::exit(1); }; } @@ -32,6 +32,6 @@ macro_rules! errln { "\x1b[0m", format!($($arg)*) ); - process::exit(-1); + std::process::exit(1); }; } \ No newline at end of file diff --git a/src/python.rs b/src/python.rs index 730ebc6..1b33578 100644 --- a/src/python.rs +++ b/src/python.rs @@ -1,4 +1,4 @@ -use crate::rs_println; +use crate::{rs_println, errln}; use std::fs; use std::ffi::CString; @@ -25,13 +25,13 @@ pub fn start(args: String) -> PyResult<()> { let empty = CString::new("").unwrap(); let app: Py = PyModule::from_code(py, &app_path, &empty, &empty)? - .getattr("run")? + .getattr("main")? .into(); return app.call0(py); }); - if from_python.is_err() { println!("py: {:?}", from_python); } + if from_python.is_err() { errln!("pyO3: {:?}", from_python); } return Ok(()); } diff --git a/src/python/main.py b/src/python/main.py index 3c092ad..0e8d103 100644 --- a/src/python/main.py +++ b/src/python/main.py @@ -1,5 +1,7 @@ import sys import asyncio +import threading +import time from macros import * import bot as botPy @@ -20,11 +22,14 @@ def main(): py_print("Reading data...") data.read_data(bot) - if True: #bot.args["py"]: + if not bot.args["py"]: py_print("Connecting to local websocket...") - asyncio.run(py_websocket.websocket_client(bot)) + ws_thread = threading.Thread(target=py_websocket.run_thread, args=(bot,)) + ws_thread.start() + + while not py_websocket.is_connected: + py_print("Awaiting connection...") + time.sleep(1) + continue - #py_websocket.send_message("[Connection test] Hello from Python!") - - -main() \ No newline at end of file + asyncio.run(py_websocket.send_message("[Connection test] Hello from Python!")) \ No newline at end of file diff --git a/src/python/py_websocket.py b/src/python/py_websocket.py index 42820d9..a1088a6 100644 --- a/src/python/py_websocket.py +++ b/src/python/py_websocket.py @@ -1,8 +1,11 @@ import websockets +import asyncio + from macros import py_print import bot as botPy ws_global = None +is_connected = False async def send_message(message: str): global ws_global @@ -11,11 +14,18 @@ async def send_message(message: str): async def websocket_client(bot: botPy.Bot): - global ws_global + global ws_global, is_connected async with websockets.connect(f"ws://127.0.0.1:{bot.args["port"]}") as ws: ws_global = ws + is_connected = True py_print(f"Connected webSocket server on ws://127.0.0.1:{bot.args["port"]}") while True: response = await ws.recv() - py_print(f"Received from Rust: {response}") \ No newline at end of file + py_print(f"Received from Rust: {response}") + + +def run_thread(bot: botPy.Bot): + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + loop.run_until_complete(websocket_client(bot)) \ No newline at end of file diff --git a/src/websocket.rs b/src/websocket.rs index dfe4090..21c1f1d 100644 --- a/src/websocket.rs +++ b/src/websocket.rs @@ -65,7 +65,6 @@ async fn handle_message(msg: tungstenite::protocol::Message, args: Args) { unsafe { if !REPLY_HELLO { - rs_println!("Replying to python..."); send_msg("[Connection test] Hello from Rust!").await; REPLY_HELLO = true; }