-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
66 lines (57 loc) · 2.08 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package main
import (
"flag"
"fmt"
"os"
"os/signal"
)
func main() {
// Define flags
var numBaristas int
var totalBeans int
var numGrinders int
var numBrewers int
var grindSpeed int
var brewSpeed int
flag.IntVar(&numBaristas, "baristas", 2, "Number of baristas working at the coffee shop")
flag.IntVar(&totalBeans, "beans", 1000, "Total amount of coffee beans (in grams) available")
flag.IntVar(&numGrinders, "grinders", 2, "Number of coffee grinders available")
flag.IntVar(&numBrewers, "brewers", 2, "Number of coffee brewers available")
flag.IntVar(&grindSpeed, "grindSpeed", 20, "Grind speed in grams per second")
flag.IntVar(&brewSpeed, "brewSpeed", 100, "Brew speed in ounces per second")
flag.Parse() // Parse command line flags
Log("Starting coffee shop with", numBaristas, "baristas,", totalBeans, "grams of beans,", numGrinders, "grinders,", numBrewers, "brewers,", "grind speed", grindSpeed, "grams per second, and brew speed", brewSpeed, "ounces per second")
if numBaristas <= 0 || totalBeans <= 0 || numGrinders <= 0 || numBrewers <= 0 {
fmt.Println("Invalid arguments. All values must be positive integers.")
return
}
// Create coffee shop with specified resources
cs := NewCoffeeShop(createGrinders(numGrinders, grindSpeed), createBrewers(numBrewers, brewSpeed), totalBeans, numBaristas)
// Start the coffee shop and get order/coffee channels
orderQueue, _ := cs.Start()
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
go func() {
<-c
os.Exit(1)
}()
id := 1
for {
orderQueue <- Order{Size: SizeSmall, ID: id, Recipe: RecipeIntense}
}
}
// Helper functions to create grinders and brewers
func createGrinders(num int, speed int) []*Grinder {
grinders := make([]*Grinder, num)
for i := 0; i < num; i++ {
grinders[i] = NewGrinder(i, speed) // Adjust grind speed (grams per second) as needed
}
return grinders
}
func createBrewers(num int, speed int) []*Brewer {
brewers := make([]*Brewer, num)
for i := 0; i < num; i++ {
brewers[i] = &Brewer{ouncesWaterPerSecond: speed} // Adjust brewing speed (ounces per second) as needed
}
return brewers
}