49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
"""Постоянная sdbg-сессия: единственный владелец MAME для CLI/MCP/DAP."""
|
|
import argparse
|
|
import json
|
|
import signal
|
|
import sys
|
|
import threading
|
|
|
|
from sdbg.model import DebugMap
|
|
from sdbg.server import SessionController, SessionRpcServer
|
|
from sdbg.session import DebugSession, SessionError
|
|
from sdbg.transport import BridgeError, FileBridge
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument('--build', required=True)
|
|
parser.add_argument('--ipc', required=True)
|
|
parser.add_argument('--session', required=True)
|
|
parser.add_argument('--socket', required=True)
|
|
parser.add_argument('--timeout', type=float, default=5)
|
|
args = parser.parse_args()
|
|
bridge = controller = server = None
|
|
try:
|
|
bridge = FileBridge(args.ipc, args.session, args.timeout)
|
|
controller = SessionController(DebugSession(DebugMap(args.build), bridge))
|
|
server = SessionRpcServer(args.socket, controller)
|
|
stop = lambda *_: threading.Thread(target=server.server.shutdown, daemon=True).start()
|
|
signal.signal(signal.SIGTERM, stop)
|
|
signal.signal(signal.SIGINT, stop)
|
|
print(json.dumps({'ready': True, 'socket': args.socket,
|
|
'build_id': controller.attached['build_id']}, ensure_ascii=False), flush=True)
|
|
server.serve_forever()
|
|
return 0
|
|
except (BridgeError, SessionError, ValueError, OSError, KeyError) as error:
|
|
print('sdbg-server: ' + str(error), file=sys.stderr)
|
|
return 1
|
|
finally:
|
|
if server is not None:
|
|
server.close()
|
|
if controller is not None:
|
|
controller.close()
|
|
elif bridge is not None:
|
|
bridge.close()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|