import sys import threading import time from queue import Empty, Queue from phasmplatform.common import valuetype from phasmplatform.common.config import from_toml from phasmplatform.common.method import Method, MethodCall from phasmplatform.common.router import StdOutRouter from .runners.base import RunnerInterface from .runners.wasmtime import WasmTimeRunner def runner_thread(runner: RunnerInterface, queue: Queue[MethodCall]) -> None: while True: try: call = queue.get(block=True, timeout=1) except Empty: break runner.do_call(call) def main() -> int: with open('config.toml', 'rb') as fil: config = from_toml(fil) del config stdout_router = StdOutRouter() with open('/home/johan/projects/idea/phasm/examples/echoclient.wasm', 'rb') as fil: echo_client = WasmTimeRunner(stdout_router, fil.read()) with open('/home/johan/projects/idea/phasm/examples/echoserver.wasm', 'rb') as fil: echo_server = WasmTimeRunner(stdout_router, fil.read()) on_module_loaded = MethodCall( Method('on_module_loaded', [], valuetype.none), [], lambda x: None, lambda x: None, # TODO: Check for MethodNotFoundError, otherwise report it ) echo_client_queue: Queue[MethodCall] = Queue() echo_client_queue.put(on_module_loaded) echo_server_queue: Queue[MethodCall] = Queue() echo_server_queue.put(on_module_loaded) echo_client_thread = threading.Thread(target=runner_thread, args=(echo_client, echo_client_queue)) echo_server_thread = threading.Thread(target=runner_thread, args=(echo_server, echo_server_queue)) echo_client_thread.start() echo_server_thread.start() time.sleep(3) return 0 if __name__ == '__main__': sys.exit(main())