1
0
This commit is contained in:
2026-01-06 22:04:52 +08:00
parent 77cc14fa49
commit 07cc58fb36
3 changed files with 63 additions and 6 deletions

View File

@@ -1,5 +1,7 @@
from command_server import CommandServer, HandshakePayload, PixelKind
from while_stopper import WhileStopper
import logging
import signal
def receive_data() -> None:
@@ -9,20 +11,26 @@ def receive_data() -> None:
def main():
server = CommandServer()
print(
'Please launch BasaltPresenter now and then press Enter to continue.')
print('Please launch BasaltPresenter now.')
print('Then press Enter to continue...')
input()
logging.info('Waiting BasaltPresenter...')
server.wait_handshake(HandshakePayload(PixelKind.GRAY_U8, 600, 600))
logging.info('Start to running.')
stopper = WhileStopper()
stopper.register()
while True:
if server.tick(receive_data, False):
if server.tick(receive_data, stopper.is_stop_requested()):
break
stopper.unregister()
logging.info('Program stop.')
print('Press Enter to exit...')
input()
if __name__ == "__main__":
logging.basicConfig(level=logging.DEBUG,

View File

@@ -48,9 +48,6 @@ class PipeOperator:
else:
# POSIX implementation
self.pipe_name = f"/tmp/{name}"
# If there is an existing FIFO file, remove it
if os.path.exists(self.pipe_name):
os.unlink(self.pipe_name)
# Create pipe
try:
os.mkfifo(self.pipe_name)

View File

@@ -0,0 +1,52 @@
import sys
IS_WINDOWS: bool = sys.platform == "win32"
if IS_WINDOWS:
import win32api
else:
import signal
class WhileStopper:
is_registered: bool
stop_requested: bool
def __init__(self) -> None:
self.is_registered = False
self.stop_requested = False
def is_stop_requested(self) -> bool:
if not self.is_registered:
raise RuntimeError('unexpected stopper status')
return self.stop_requested
def register(self):
if self.is_registered:
raise RuntimeError('unexpected stopper status')
self.stop_requested = False
if IS_WINDOWS:
win32api.SetConsoleCtrlHandler(self.__win_handler, True)
else:
signal.signal(signal.SIGINT, self.__posix_handler)
self.is_registered = True
def unregister(self):
if not self.is_registered:
raise RuntimeError('unexpected stopper status')
if IS_WINDOWS:
win32api.SetConsoleCtrlHandler(None, False)
else:
signal.signal(signal.SIGINT, signal.SIG_DFL)
self.is_registered = False
def __win_handler(self, ctrl_type: int) -> bool:
self.stop_requested = True
return True
def __posix_handler(self, signal, frame) -> None:
self.stop_requested = True