|
import random
|
|
import socket
|
|
import time
|
|
|
|
|
|
def check_port_available(port: int) -> bool:
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
try:
|
|
sock.bind(('localhost', port))
|
|
return True
|
|
except OSError:
|
|
time.sleep(0.1)
|
|
return False
|
|
finally:
|
|
sock.close()
|
|
|
|
|
|
def find_available_tcp_port(min_port=30000, max_port=39999, max_attempts=10) -> int:
|
|
"""Find an available TCP port in a specified range.
|
|
|
|
Args:
|
|
min_port (int): The lower bound of the port range (default: 30000)
|
|
max_port (int): The upper bound of the port range (default: 39999)
|
|
max_attempts (int): Maximum number of attempts to find an available port (default: 10)
|
|
|
|
Returns:
|
|
int: An available port number, or -1 if none found after max_attempts
|
|
"""
|
|
rng = random.SystemRandom()
|
|
ports = list(range(min_port, max_port + 1))
|
|
rng.shuffle(ports)
|
|
|
|
for port in ports[:max_attempts]:
|
|
if check_port_available(port):
|
|
return port
|
|
return -1
|
|
|
|
|
|
def display_number_matrix(number: int) -> str | None:
|
|
if not 0 <= number <= 999:
|
|
return None
|
|
|
|
|
|
digits = {
|
|
'0': ['###', '# #', '# #', '# #', '###'],
|
|
'1': [' #', ' #', ' #', ' #', ' #'],
|
|
'2': ['###', ' #', '###', '# ', '###'],
|
|
'3': ['###', ' #', '###', ' #', '###'],
|
|
'4': ['# #', '# #', '###', ' #', ' #'],
|
|
'5': ['###', '# ', '###', ' #', '###'],
|
|
'6': ['###', '# ', '###', '# #', '###'],
|
|
'7': ['###', ' #', ' #', ' #', ' #'],
|
|
'8': ['###', '# #', '###', '# #', '###'],
|
|
'9': ['###', '# #', '###', ' #', '###'],
|
|
}
|
|
|
|
|
|
num_str = str(number)
|
|
|
|
result = []
|
|
for row in range(5):
|
|
line = ' '.join(digits[digit][row] for digit in num_str)
|
|
result.append(line)
|
|
|
|
matrix_display = '\n'.join(result)
|
|
return f'\n{matrix_display}\n'
|
|
|