# P2P Network Communication - Configuration Module """ 配置模块,包含服务器和客户端的配置参数 """ import os from dataclasses import dataclass from typing import Optional @dataclass class ServerConfig: """服务器配置""" host: str = "0.0.0.0" port: int = 8888 max_connections: int = 1000 heartbeat_interval: int = 30 # seconds offline_message_ttl: int = 7 * 24 * 3600 # 7 days in seconds # Database configuration db_host: str = "localhost" db_port: int = 3306 db_name: str = "p2p_chat" db_user: str = "root" db_password: str = "" db_pool_size: int = 10 @dataclass class ClientConfig: """客户端配置""" server_host: str = "113.45.148.222" server_port: int = 8888 # LAN discovery lan_broadcast_port: int = 8889 lan_discovery_timeout: float = 2.0 # seconds # Connection settings connection_timeout: float = 10.0 # seconds reconnect_attempts: int = 3 reconnect_delay: float = 1.0 # seconds (will be multiplied: 1s, 2s, 4s) heartbeat_interval: int = 30 # seconds # File transfer chunk_size: int = 64 * 1024 # 64KB per chunk max_file_size: int = 2 * 1024 * 1024 * 1024 # 2GB max # Voice chat audio_sample_rate: int = 16000 audio_channels: int = 1 audio_chunk_duration: float = 0.02 # 20ms per chunk max_voice_latency: float = 0.3 # 300ms max latency # UI settings window_width: int = 1024 window_height: int = 768 thumbnail_size: tuple = (200, 200) # Local storage data_dir: str = "data" cache_dir: str = "cache" @dataclass class SecurityConfig: """安全配置""" use_tls: bool = True cert_file: Optional[str] = None key_file: Optional[str] = None # Encryption encryption_algorithm: str = "AES-256-GCM" key_derivation: str = "PBKDF2" key_iterations: int = 100000 def load_server_config() -> ServerConfig: """从环境变量加载服务器配置""" return ServerConfig( host=os.getenv("P2P_SERVER_HOST", "0.0.0.0"), port=int(os.getenv("P2P_SERVER_PORT", "8888")), max_connections=int(os.getenv("P2P_MAX_CONNECTIONS", "1000")), db_host=os.getenv("P2P_DB_HOST", "localhost"), db_port=int(os.getenv("P2P_DB_PORT", "3306")), db_name=os.getenv("P2P_DB_NAME", "p2p_chat"), db_user=os.getenv("P2P_DB_USER", "root"), db_password=os.getenv("P2P_DB_PASSWORD", ""), ) def load_client_config() -> ClientConfig: """从环境变量加载客户端配置""" return ClientConfig( server_host=os.getenv("P2P_SERVER_HOST", "127.0.0.1"), server_port=int(os.getenv("P2P_SERVER_PORT", "8888")), ) def load_security_config() -> SecurityConfig: """从环境变量加载安全配置""" return SecurityConfig( use_tls=os.getenv("P2P_USE_TLS", "true").lower() == "true", cert_file=os.getenv("P2P_CERT_FILE"), key_file=os.getenv("P2P_KEY_FILE"), )