Passer au contenu principal

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 :
ParamètreValeur
Type de piloteWIN_DRIVER
Hauteur des fragments rasterLignes 128
Délai d’expiration du statut3000ms
Expiration du délai de demande d’impression5000ms
Expiration du délai du tiroir-caisse3000ms
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

CommandeOctetsBut
Initialiser1B 40Réinitialisez l’imprimante avant chaque tâche.
Image rastée1D 76 30 00 ...Envoyé par des morceaux de console.
Alimentation0A 0A 0A 0ANourrir avant de couper.
Coupe partielleGénéré par l’encodeurPapier découpé partiellement.
Bip1B 42 01 01Commande bip répétée par le conducteur.
Tiroir-caisse1B 70 00 19 FAImpulsion du tiroir.

Cycle de vie des sockets

Le travailleur actuel ouvre et ferme la connexion de l’imprimante pour chaque tâche.
ConstanteValeurBut
OPEN_ATTEMPT_TIMEOUT_MS2000Temps maximum pour ouvrir le socket TCP.
CONNECTION_COOLDOWN_MS250Délai minimum après la fermeture avant une autre ouverture.
CLOSE_TIMEOUT_MS250Max attend une fermeture gracieuse avant de détruire.
WRITE_TIMEOUT_MS6000Temps maximum pour une écriture sur une socket.
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.