Source code for padrelay.scripts.client

#!/usr/bin/env python3
"""
Entry point for the PadRelay client
"""
import asyncio
import signal
import sys

from padrelay.core.config import parse_client_args
from padrelay.core.logging_utils import get_logger
from padrelay.client.client_app import VirtualGamepadClient
from padrelay.client.input import GamepadInput

logger = get_logger("client")

[docs] async def async_main(): # Parse command line arguments args, config_obj = parse_client_args() # Initialize gamepad input gamepad = GamepadInput(args.joystick_index) if not gamepad.initialize(): logger.error("Failed to initialize gamepad. Exiting.") return 1 # Create client application client = VirtualGamepadClient( server_ip=args.server_ip, server_port=args.server_port, protocol=args.protocol, gamepad=gamepad, update_rate=args.update_rate, password=args.password, config=config_obj, enable_tls=args.enable_tls, ) # Set up signal handlers loop = asyncio.get_running_loop() for sig in (signal.SIGINT, signal.SIGTERM): loop.add_signal_handler( sig, lambda: asyncio.create_task(client.shutdown()) ) # Run the client try: await client.run() return 0 except Exception as e: logger.error(f"Unhandled exception: {e}") return 1
[docs] def main(): try: return asyncio.run(async_main()) except KeyboardInterrupt: logger.info("Client terminated by user") return 0 except Exception as e: logger.error(f"Fatal error: {e}") return 1
if __name__ == "__main__": sys.exit(main())