mirror of
https://github.com/lowobservable/oec.git
synced 2026-01-13 15:27:20 +00:00
Add SIGINT and SIGTERM signal handler
This commit is contained in:
parent
c4f45b6ea9
commit
73b5955d60
@ -1,4 +1,5 @@
|
||||
import time
|
||||
import signal
|
||||
import logging
|
||||
import argparse
|
||||
from serial import Serial
|
||||
@ -12,6 +13,8 @@ from .keymap_3483 import KEYMAP as KEYMAP_3483
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
|
||||
controller = None
|
||||
|
||||
def _get_keymap(terminal_id, extended_id):
|
||||
keymap = KEYMAP_3278_2
|
||||
|
||||
@ -31,7 +34,22 @@ def _create_session(args, terminal):
|
||||
|
||||
raise ValueError('Unsupported emulator')
|
||||
|
||||
def _signal_handler(number, frame):
|
||||
global controller
|
||||
|
||||
print('Stopping controller...')
|
||||
|
||||
if controller:
|
||||
controller.stop()
|
||||
|
||||
controller = None
|
||||
|
||||
signal.signal(signal.SIGINT, _signal_handler)
|
||||
signal.signal(signal.SIGTERM, _signal_handler)
|
||||
|
||||
def main():
|
||||
global controller
|
||||
|
||||
parser = argparse.ArgumentParser(description=('An open replacement for the IBM 3174 '
|
||||
'Establishment Controller'))
|
||||
|
||||
|
||||
@ -69,6 +69,14 @@ class Controller:
|
||||
if poll_response:
|
||||
self._handle_poll_response(poll_response)
|
||||
|
||||
self._terminate_session()
|
||||
|
||||
if self.terminal:
|
||||
self.terminal = None
|
||||
|
||||
def stop(self):
|
||||
self.running = False
|
||||
|
||||
def _handle_terminal_attached(self, poll_response):
|
||||
self.logger.info('Terminal attached')
|
||||
|
||||
@ -99,10 +107,7 @@ class Controller:
|
||||
def _handle_terminal_detached(self):
|
||||
self.logger.info('Terminal detached')
|
||||
|
||||
if self.session:
|
||||
self.session.terminate()
|
||||
|
||||
self.session = None
|
||||
self._terminate_session()
|
||||
|
||||
self.terminal = None
|
||||
|
||||
@ -119,6 +124,14 @@ class Controller:
|
||||
|
||||
self.session.start()
|
||||
|
||||
def _terminate_session(self):
|
||||
if not self.session:
|
||||
return
|
||||
|
||||
self.session.terminate()
|
||||
|
||||
self.session = None
|
||||
|
||||
def _handle_poll_response(self, poll_response):
|
||||
if isinstance(poll_response, KeystrokePollResponse):
|
||||
self._handle_keystroke_poll_response(poll_response)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user