iPlug2 - C++ Audio Plug-in Framework
Loading...
Searching...
No Matches
serve.py
1#!/usr/bin/env python3
2"""Serve an iPlug2 Wasm distribution with SharedArrayBuffer headers."""
3
4from __future__ import annotations
5
6import argparse
7import os
8from functools import partial
9from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
10
11
12class IPlugWasmRequestHandler(SimpleHTTPRequestHandler):
13 extensions_map = {
14 **SimpleHTTPRequestHandler.extensions_map,
15 ".wasm": "application/wasm",
16 ".js": "text/javascript",
17 }
18
19 def end_headers(self) -> None:
20 self.send_header("Cross-Origin-Opener-Policy", "same-origin")
21 self.send_header("Cross-Origin-Embedder-Policy", "require-corp")
22 self.send_header("Cross-Origin-Resource-Policy", "same-origin")
23 super().end_headers()
24
25
26def main() -> None:
27 parser = argparse.ArgumentParser(description=__doc__)
28 parser.add_argument("-b", "--bind", default="127.0.0.1", help="Address to bind")
29 parser.add_argument("-p", "--port", default=8080, type=int, help="Port to listen on")
30 parser.add_argument(
31 "-d",
32 "--directory",
33 default=os.path.dirname(os.path.abspath(__file__)),
34 help="Directory to serve",
35 )
36 args = parser.parse_args()
37
38 directory = os.path.abspath(args.directory)
39 handler = partial(IPlugWasmRequestHandler, directory=directory)
40 server = ThreadingHTTPServer((args.bind, args.port), handler)
41 print(f"Serving {directory} at http://{args.bind}:{args.port}/")
42 print("SharedArrayBuffer headers enabled.")
43
44 try:
45 server.serve_forever()
46 except KeyboardInterrupt:
47 pass
48 finally:
49 server.server_close()
50
51
52if __name__ == "__main__":
53 main()