package service import ( "encoding/hex" fifo "github.com/foize/go.fifo" "github.com/justinmichaelvieira/escpos" "github.com/liamg/tml" "net" "uberbringer/config" ) func newPrintJob(input DataStruct, queue *fifo.Queue) { var byteLength int for _, item := range input.Data { byteLength += len(item.Text) } if byteLength > 4096 { tml.Printf("[" + config.Project + "]: Job #" + input.JobID + " buffer limit reached\n") return } else { tml.Printf("[" + config.Project + "]: Job #" + input.JobID + " buffer size used " + string(byteLength) + " bytes \n") } printJobCreate(input, queue) } func printJobCreate(input DataStruct, queue *fifo.Queue) { tml.Printf("[" + config.Project + "]: Adding job #" + input.JobID + " to print queue\n") socket, err := net.Dial("tcp", config.PrinterAddr+":9100") if err != nil { println(err.Error()) } defer func(socket net.Conn) { err := socket.Close() if err != nil { println(err.Error()) } }(socket) p := escpos.New(socket) p.SetConfig(escpos.ConfigEpsonTMT20II) p.Initialize() p.DefaultLineSpacing() for i, item := range input.Data { var SeqNum = i + 1 tml.Printf("[" + config.Project + "]: Job #" + input.JobID + " - creating command " + string(SeqNum) + "\n") if item.Type <= 0 || item.Type > 6 { tml.Printf("[" + config.Project + "]: Job #" + input.JobID + " bad type\n") return } else if item.Size <= 0 || item.Size > 16 { tml.Printf("[" + config.Project + "]: Job #" + input.JobID + " bad size\n") return } else { switch item.Type { case 1: // Generate Regular Text p.Bold(false).Size(uint8(item.Size), uint8(item.Size)).Write(item.Text) case 2: // Generate Bold Text p.Bold(true).Size(uint8(item.Size), uint8(item.Size)).Write(item.Text) case 3: // Generate QR Code p.QRCode(item.Text, true, uint8(item.Size), escpos.QRCodeErrorCorrectionLevelH) case 4: // New Line p.LineFeed() case 5: // New Line X amount of times p.LineFeedD(uint8(item.Size)) case 6: // Decode Base64Raw Input /* base64_decoded, err := base64.StdEncoding.DecodeString(item.Text) if err != nil { tml.Printf("[" + config.Project + "]: Job #" + input.JobID + " base64 decode failed\n") return } */ hex_decoded, err := hex.DecodeString(item.Text) if err != nil { tml.Printf("[" + config.Project + "]: Job #" + input.JobID + " hex decode failed\n") return } p.WriteRaw([]byte(hex_decoded)) } tml.Printf("[" + config.Project + "]: Job #" + input.JobID + " good type\n") } } tml.Printf("[" + config.Project + "]: Printing job #" + input.JobID + "\n") p.LineFeed() err = p.PrintAndCut() if err != nil { println(err.Error()) } tml.Printf("[" + config.Project + "]: Done printing #" + input.JobID + "\n") }