65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
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())
|