Skip to main content

Flux d’impression

Le pilote d’imprimante PC revient intentionnellement rapidement de /print. Les E/S réelles de l’imprimante se produisent dans le programme de travail en arrière-plan de l’imprimante cible.

Flux de bout en bout

  1. La console Plato génère un reçu, un ticket ou un rapport dans un blob PNG.
  2. L’adaptateur Console WIN_DRIVER convertit l’image en lignes raster noir/blanc.
  3. Les lignes raster sont divisées en morceaux de 128 lignes.
  4. Chaque morceau est codé en tant que commande raster ESC/POS et codé en base64.
  5. La console envoie POST /print avec ip_address, port et chunks.
  6. Le pilote encapsule les morceaux avec de petits délais, ajoute l’alimentation/la coupe et ajoute éventuellement des commandes sonores.
  7. Le travail est ajouté à la file d’attente BullMQ de cette imprimante.
  8. Le travailleur ouvre un socket TCP sur l’imprimante.
  9. Le travailleur envoie l’initialisation ESC/POS, puis chaque morceau.
  10. Le travailleur ferme la connexion de l’imprimante après le travail.

Blocage de la console

L’adaptateur de console utilise : Le navigateur envoie des morceaux raster déjà codés. Le pilote ne restitue pas le HTML.

Emballage de fragments de pilotes

receipt-encoder.ts transforme les blocs entrants en blocs de tâches :
  • Chaque morceau entrant est décodé en base64.
  • Chaque morceau d’impression obtient delayAfterMs: 25.
  • Une commande d’avance et de coupe partielle est annexée.
  • Si beep est vrai, 18 commandes sonores sont ajoutées.
  • Chaque morceau de bip a delayAfterMs: 150.

Commandes ESC/POS

Cycle de vie des sockets

Le travailleur actuel ouvre et ferme la connexion de l’imprimante pour chaque tâche. Il existe également un minuteur de libération inactive de 3000ms, mais le chemin de processus actuel ferme la connexion immédiatement après chaque tâche réussie.

Chemin d’échec

Si l’ouverture ou l’écriture échoue :
  1. L’imprimante est marquée offline.
  2. La douille est libérée/détruite.
  3. Le travail BullMQ échoue.
  4. BullMQ réessaye après queue.retryDelayMs.
  5. Lorsque l’imprimante est à nouveau atteinte, les travaux de nouvelle tentative différée sont promus, à moins qu’ils ne soient intentionnellement planifiés avec un futur runAt.

Sondage d’état

POST /status peut sonder l’imprimante uniquement lorsque le travail en file d’attente n’est pas actif. Cela évite d’ouvrir une prise de sonde alors que la même imprimante est en train d’imprimer.