コード例 #1
0
func run(interval time.Duration, nameTagQueue *data.NameTagQueue,
	printerQueue *data.PrinterQueue, config *config.Config) {
	fmt.Println("Print Server Started")
	Timer = time.NewTicker(interval * time.Second)
	for {
		select {
		case <-Timer.C:
			printer := printerQueue.GetNext()
			if printer == nil {
				continue
			}
			var nameTag *data.NameTag
		getNew:
			if printer.NameTag != nil && printer.NameTag.Error == false {
				fmt.Printf("%v\n", printer.NameTag)
				tag, err := nameTagQueue.Find(printer.NameTag.Id, config)
				if err != nil {
					printer.NameTag.Error = true
					goto getNew
				}
				nameTag = tag
			} else {
				nameTag = nameTagQueue.GetNext()
				if nameTag == nil {
					continue
				}
				printer.NameTag = nameTag
			}
			nameTag.State = "Assigned to printer"
			if nameTag.Stl == "" {
				nameTag.State = "Rendering STL"
				err := service.Export(nameTag, config)
				if err != nil {
					fmt.Println(err)
					nameTag.Error = true
					nameTag.State = "Has Error"
					goto save
				}
			}
			if nameTag.Gcode == "" {
				nameTag.State = "Slicing"
				err := service.Slice(nameTag, printer, config)
				if err != nil {
					fmt.Println(err)
					nameTag.Error = true
					nameTag.State = "Has Error"
					goto save
				}
			}
			if nameTag.Printing == false && printer.Printing == false {
				nameTag.State = "Uploading"
				err := service.Upload(nameTag, printer, config)
				if err != nil {
					log.Println(err)
					printer.Active = false
					goto save
				}
				printer.Printing = true
				nameTag.Printing = true
				nameTag.State = "Printing"
			}
		save:
			printerQueue.Save(config)
			nameTagQueue.Save(config)
			config.DebugLog("Finnished Loop")
		case <-Quit:
			Timer.Stop()
			return
		}
	}

}