-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathValues.py
More file actions
115 lines (88 loc) · 3.99 KB
/
Copy pathValues.py
File metadata and controls
115 lines (88 loc) · 3.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
"""
Módulo de configuración y variables globales.
Este módulo define todas las constantes, variables globales y estructuras de datos
compartidas utilizadas por la aplicación de mensajería. Incluye la definición
del protocolo de comunicación, tipos de tramas, y configuraciones de red.
Contiene:
- Constantes del protocolo (EtherType, tamaños de trama, timeouts)
- Tipos de tramas del protocolo personalizado
- Variables globales para el estado de la aplicación
- Diccionarios para gestión de dispositivos conectados
- Configuraciones de transferencia de archivos
"""
import threading
import queue
ETHERTYPE = 0x88B5
BROADCAST_MAC = "ff:ff:ff:ff:ff:ff"
INTERFACE = ""
MAC_ORIGIN = ""
ALIAS = ""
SIZE_FRAME = 1450 # Tamaño máximo de datos en la trama (sin contar cabeceras)
# Bandera simple para controlar si este nodo está recibiendo actualmente un archivo (solo uno a la vez)
RECEIVING_FILE = False
# Bandera para controlar si se acepta una solicitud de archivo
FILE_REQ_ACCEPT = False
# Tiempo entre cada envio de trama en segundos (para evitar saturar la red)
SEND_DELAY = 0.0025
BATCH_SIZE = 100 # Número de fragmentos antes de ACK
BATCH_ACK_TIMEOUT = 0.5 # Segundos para timeout de ACK
BATCH_ACK_CONFIRMATIONS = False # Saber si llegaron todas las tramas al receptor
FILE_REQ_TIMEOUT = 15 # Segundos para timeout de solicitud de archivo
FILE_REQ_MAX_ATTEMPTS = 3 # Máximo número de reintentos para solicitud de archivo
# Diccionario de tipos de trama (1 byte cada uno)
FRAME_TYPES = {
"WHO_IS_THERE" : b"\x01", # 0
"WHO_IS_THERE_RESPONSE" : b"\x02", # 1
"MESSAGE_START" : b"\x03", # 2
"MESSAGE_PART" : b"\x04", # 3
"MESSAGE_END" : b"\x05", # 4
"FILE_REQUEST" : b"\x10", # 5
"FILE_PART" : b"\x11", # 6
"FILE_NAME" : b"\x12", # 7
"FILE_ACCEPT": b"\x14", # 8
"FILE_BATCH_ACK": b"\x15", # 9
}
TYPES_VALUES = list(FRAME_TYPES.values())
# Candado para diccionarios
HOST_LOCK = threading.Lock()
# Diccionario de dispositivos conectados {nombre : mac}
CONNECTED_HOSTS_ALIAS = {}
# Diccionario de dispositivos conectados {mac : nombre}
CONNECTED_HOSTS_MAC = {}
# Diccionario de mensajes en recepción {mac : mensaje}
RECEPTIONS = {}
# Diccionario para guardar la ultima respuesta {mac : timestamp}
LAST_SEEN = {}
# Cola de mensajes entrantes para integración con la GUI (ChatView)
# Los productores (hilo de recepción) añaden tuplas (alias, mensaje)
# El consumidor (GUI) las extrae periódicamente y las muestra en pantalla.
INCOMING_MESSAGES: "queue.Queue[tuple[str, str]]" = queue.Queue()
# Cola de archivos entrantes para integración con la GUI
# Los productores (hilo de recepción) añaden dicts con metadatos del archivo:
# { 'alias': str, 'name': str, 'path': str, 'is_folder': bool }
# El consumidor (GUI) las extrae periódicamente y las muestra en pantalla.
INCOMING_FILES: "queue.Queue[dict]" = queue.Queue()
# Cola de archivos entrantes para integración con la GUI
# Los productores (hilo de recepción) añaden dicts con metadatos del archivo:
# { 'alias': str, 'name': str, 'path': str, 'is_folder': bool }
# El consumidor (GUI) las extrae periódicamente y las muestra en pantalla.
INCOMING_FILES: "queue.Queue[dict]" = queue.Queue()
HELP_TEXT = """
=== Comandos disponibles ===
/list
Lista todos los dispositivos conectados con su alias y MAC.
/broadcast
Busca y descubre todos los dispositivos disponibles en la misma red.
/msg <Alias> <Mensaje>
Envía un mensaje al dispositivo indicado por su alias.
Ejemplo: /msg Alice Hola, ¿cómo estás?
/files <Alias> <Ruta>
Envía archivos o carpetas al dispositivo de destino.
- Si es archivo: se envía sin comprimir.
- Si es carpeta: se envían sus archivos de forma individual, preservando la estructura de carpetas.
Debes especificar un alias válido y la ruta completa o relativa.
Ejemplo: /files Alice /home/user/documento.txt
/files Bob ./mi_carpeta
/exit
Cierra la aplicación.
"""