50 lines
1.3 KiB
Python
50 lines
1.3 KiB
Python
"""
|
|
First
|
|
Author: vs-olitus | https://github.com/vs-olitus/First
|
|
"""
|
|
import asyncio
|
|
import sys
|
|
|
|
from src.cli import parse_cli_options
|
|
from src.logger import create_logger
|
|
from src.engine import DebugEngine
|
|
from src.userscript import load_userscripts, load_userscripts_by_files
|
|
|
|
|
|
async def main():
|
|
options = parse_cli_options()
|
|
logger = create_logger(options)
|
|
|
|
# Load userscripts
|
|
if options.script_files:
|
|
userscripts = load_userscripts_by_files(options.script_files)
|
|
else:
|
|
userscripts = load_userscripts(options.scripts_dir)
|
|
if userscripts:
|
|
logger.info(f"[userscript] loaded {len(userscripts)} userscript(s) from {options.scripts_dir}:")
|
|
for s in userscripts:
|
|
logger.info(f"[userscript] - {s.name} (run-at: {s.run_at}, match: {s.match})")
|
|
else:
|
|
logger.info(f"[userscript] no userscripts found in {options.scripts_dir}")
|
|
|
|
engine = DebugEngine(options, logger, userscripts)
|
|
try:
|
|
await engine.start()
|
|
except Exception:
|
|
sys.exit(1)
|
|
|
|
# Keep running until interrupted
|
|
try:
|
|
await asyncio.Future()
|
|
except (KeyboardInterrupt, asyncio.CancelledError):
|
|
logger.info("[server] shutting down...")
|
|
finally:
|
|
await engine.stop()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
asyncio.run(main())
|
|
except KeyboardInterrupt:
|
|
pass
|