Add shared-session MCP source debugger adapter
This commit is contained in:
@@ -251,6 +251,7 @@ def main():
|
||||
mame_process=subprocess.Popen(command,cwd=state,env=environment,
|
||||
stdout=log,stderr=subprocess.STDOUT)
|
||||
server=None
|
||||
socket_identity=None
|
||||
def mame_diagnostics():
|
||||
log.flush()
|
||||
output=(state/'mame.log').read_text(errors='replace')[-4000:].strip()
|
||||
@@ -261,8 +262,13 @@ def main():
|
||||
if mame_process.poll() is not None:
|
||||
raise RuntimeError('MAME завершился до main; лог: '+
|
||||
str(state/'mame.log')+mame_diagnostics())
|
||||
if (state/'main.json.error').exists() or time.monotonic()>deadline:
|
||||
raise RuntimeError('Таймаут ожидания main; лог: '+
|
||||
error_file=state/'main.json.error'
|
||||
if error_file.exists():
|
||||
raise RuntimeError('MAME не дошёл до main: '+
|
||||
error_file.read_text(errors='replace').strip()+
|
||||
'; лог: '+str(state/'mame.log')+mame_diagnostics())
|
||||
if time.monotonic()>deadline:
|
||||
raise RuntimeError('Таймаут ожидания main без ответа Lua; лог: '+
|
||||
str(state/'mame.log')+mame_diagnostics())
|
||||
time.sleep(.05)
|
||||
entry=json.loads(ready.read_text())
|
||||
@@ -273,6 +279,8 @@ def main():
|
||||
if not line:
|
||||
raise RuntimeError('Session server не запустился'+mame_diagnostics())
|
||||
server_ready=json.loads(line)
|
||||
socket_state=Path(args.socket).lstat()
|
||||
socket_identity=(socket_state.st_dev,socket_state.st_ino)
|
||||
print(json.dumps({'ready':True,'socket':args.socket,'pid':mame_process.pid,
|
||||
'entry':entry,'build_id':server_ready['build_id']},
|
||||
ensure_ascii=False),flush=True)
|
||||
@@ -284,6 +292,14 @@ def main():
|
||||
server.terminate()
|
||||
try: server.wait(timeout=3)
|
||||
except subprocess.TimeoutExpired: server.kill();server.wait()
|
||||
if socket_identity is not None:
|
||||
socket_path=Path(args.socket)
|
||||
try:
|
||||
current=socket_path.lstat()
|
||||
if (current.st_dev,current.st_ino)==socket_identity:
|
||||
socket_path.unlink()
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
if mame_process.poll() is None:
|
||||
mame_process.terminate()
|
||||
try: mame_process.wait(timeout=5)
|
||||
|
||||
Reference in New Issue
Block a user