forked from steger/pr3-ws202526
34 lines
817 B
Go
34 lines
817 B
Go
package airport
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
type Runway struct {
|
|
takeoffDuration time.Duration
|
|
queue chan Aircraft
|
|
}
|
|
|
|
func NewRunway(takeoffDuration time.Duration) Runway {
|
|
return Runway{
|
|
takeoffDuration: takeoffDuration,
|
|
queue: make(chan Aircraft),
|
|
}
|
|
}
|
|
|
|
func (r *Runway) Start() {
|
|
defer fmt.Println("runway terminated")
|
|
|
|
for ac := range r.queue {
|
|
fmt.Printf("Flight %v to %v is taking off\n", ac.Flight.Id, ac.Flight.Destination)
|
|
time.Sleep(r.takeoffDuration)
|
|
fmt.Printf("\033[32mFlight %v to %v has taken off with %v passengers and %v bags on board\033[0m\n", ac.Flight.Id, ac.Flight.Destination, int(len(ac.Passengers)), int(len(ac.Baggage)))
|
|
}
|
|
}
|
|
|
|
func (r *Runway) ProcessAircraft(ac Aircraft) {
|
|
fmt.Printf("Flight %v is waiting for takeoff\n", ac.Flight.Id)
|
|
r.queue <- ac
|
|
}
|