Tabla de Contenidos

Flujo P2P y ejemplos de sincronización

Flujo general de P2P

El flujo central de sincronización P2P en RutaPAE es:

  1. Inicializar DomainManager.
  2. Iniciar P2PManager.start().
  3. Detectar peers y hotspots.
  4. Conectar con la máquina deseada.
  5. Descargar entregas pendientes.
  6. Confirmar entregas sincronizadas al dispositivo remoto.

Diagrama de conexión P2P

flowchart TD
    A[RutaPAE inicia] --> B[DomainManager.init()]
    B --> C[P2PManager.start()]
    C --> D[Descubrir peers y hotspots]
    D --> E{Máquina conocida?}
    E -->|Sí| F[connectMachine]
    E -->|No| G[connectDiscoveredMachine]
    G --> H[resolveConnectedPeerAddress]
    F --> H
    H --> I[SyncDeliveriesFromMachine]
    I --> J[GET /p2p/machine/deliveries/<page>/<size>]
    I --> K[GET /p2p/machine/delivery/<id>]
    I --> L[GET /p2p/machine/delivery/synchronized/<id>]
    L --> M[Eliminar entrega local sincronizada]

Ejemplo 1: conectar una máquina conocida

  1. El usuario elige una máquina de la lista.
  2. RutaPAE llama P2PManager.connectMachine(machineDatabaseId).
  3. P2PManager intenta resolver la dirección del peer conectado.
  4. Si no hay peer conectado, busca en discoveredPeers.
  5. Si hay hotspot, intenta connectHotspot.
  6. Una vez conectado, syncDeliveriesFromMachine() puede iniciar.

Ejemplo 2: conectar una máquina descubierta

  1. Aparece un peer desconocido en discoveredPeers.
  2. Se muestra como candidato en la UI.
  3. El usuario solicita conexión.
  4. Se invoca P2PManager.connectDiscoveredMachine(address).
  5. El gestor intenta conectar y espera que el peer pase a machines.

Ejemplo 3: unir a un hotspot de máquina

  1. El sistema detecta hotspotCandidates.
  2. Si el hotspot es abierto, o tiene passphrase, se intenta conectar automáticamente.
  3. Si no puede auto-unir, busca un peer descubierto como fallback.
  4. Tras unirse, espera que aparezca el peer en machines.

Tipos de descubrimiento

Sincronización de entregas

Iteración de páginas

Creación local

Para cada entrega remota:

Confirmación de entrega sincronizada

Una vez que RutaPAE confirma una entrega remota sincronizada:

Resiliencia de flujo

Ejemplo de actualización de configuración

  1. El operador solicita la configuración de la máquina.
  2. getMachineConfiguration(machineDatabaseId) llama a GET /p2p/machine/configuration.
  3. El operador modifica valores locales.
  4. updateMachineConfiguration(machineDatabaseId, configuration) hace PUT /p2p/machine/configuration.
  5. La máquina responde con P2PMachineConfigurationUpdateResponse.