Commit b0340e6d authored by Boris Mühmer's avatar Boris Mühmer
Browse files

added actions and avatars

parent 6c593ba6
Loading
Loading
Loading
Loading
+45 −2
Original line number Diff line number Diff line
@@ -6,6 +6,9 @@ import (
	"os"
	"time"

	"repositories.muehmer.net/bsmrgo/stars/pkg/stars/actions/addavatar"
	"repositories.muehmer.net/bsmrgo/stars/pkg/stars/actions/listavatars"
	"repositories.muehmer.net/bsmrgo/stars/pkg/stars/objects/avatar"
	"repositories.muehmer.net/bsmrgo/stars/pkg/stars/simulator"
)

@@ -15,11 +18,17 @@ func main() {

	var tickDuration time.Duration
	var timeoutDuration time.Duration
	var addSpecialAvatars bool
	var addGenericAvatars bool
	var numberOfGenericAvatars int

	flag.DurationVar(&tickDuration, "tick", 50*time.Microsecond, "tick duration for the simulator")
	flag.DurationVar(&timeoutDuration, "timeout", 10*time.Second, "timeout until main() stops the simulator")
	flag.Parse()
	flag.BoolVar(&addSpecialAvatars, "special", true, "enable special avatars")
	flag.BoolVar(&addGenericAvatars, "generic", false, "enable generic avatars")
	flag.IntVar(&numberOfGenericAvatars, "count", 10, "the number of generic avatars")

	t := time.After(timeoutDuration)
	flag.Parse()

	stop := make(chan bool)
	defer func() {
@@ -34,6 +43,39 @@ func main() {
		fmt.Fprintln(os.Stderr, "main(): simulator finished.")
	}()

	<-s.ReadyChannel()
	fmt.Fprintln(os.Stderr, "main(): simulator is ready")

	if addSpecialAvatars {
		go func() {
			s.ActionChannel() <- addavatar.New(avatar.New("Johnson Smith"))
			s.ActionChannel() <- addavatar.New(avatar.New("Blue Velvet"))
			s.ActionChannel() <- addavatar.New(avatar.New("Jonny Silver"))
			s.ActionChannel() <- addavatar.New(avatar.New("Susi Sorglos"))
		}()
	}

	if addGenericAvatars {
		for i := 0; i < numberOfGenericAvatars; i++ {
			go func(i int) {
				s.ActionChannel() <- addavatar.New(avatar.New(fmt.Sprintf("Generic %d", i+1)))
			}(i)
		}
	}

	lv := listavatars.New()
	go func() {
		s.ActionChannel() <- lv
	}()
	<-lv.Done

	for i, n := range lv.Names {
		fmt.Fprintf(os.Stderr, "main(): Avatar %d: %s\n", i, n)
	}

	t := time.After(timeoutDuration)

	fmt.Fprintln(os.Stderr, "main(): loop: starting...")
loop:
	for {
		select {
@@ -43,6 +85,7 @@ loop:
			break loop
		}
	}
	fmt.Fprintln(os.Stderr, "main(): loop: exited.")

	r := <-s.DoneChannel()

+40 −0
Original line number Diff line number Diff line
package addavatar

import (
	"fmt"
	"os"

	"repositories.muehmer.net/bsmrgo/stars/pkg/stars/interfaces"
)

const (
	// CommandName ...
	CommandName = "Add Avatar"
)

// AddAvatar ...
type AddAvatar struct {
	avatar interfaces.Avatarer
}

// New ...
func New(avatar interfaces.Avatarer) *AddAvatar {
	return &AddAvatar{
		avatar: avatar,
	}
}

// Name ...
func (a *AddAvatar) Name() string {
	return CommandName
}

// Do ...
func (a *AddAvatar) Do(s interfaces.Simulatorer) error {
	fmt.Fprintf(os.Stderr, "Action: AddAvatar: %s\n", a.avatar.Name())
	s.Avatars()[a.avatar.Name()] = a.avatar
	go func() {
		a.avatar.Run()
	}()
	return nil
}
+37 −0
Original line number Diff line number Diff line
package listavatars

import "repositories.muehmer.net/bsmrgo/stars/pkg/stars/interfaces"

const (
	// CommandName ...
	CommandName = "List Avatars"
)

// ListAvatars ...
type ListAvatars struct {
	Names []string
	Done  chan bool
}

// New ...
func New() *ListAvatars {
	return &ListAvatars{
		Names: []string{},
		Done:  make(chan bool),
	}
}

// Name ...
func (a *ListAvatars) Name() string {
	return CommandName
}

// Do ...
func (a *ListAvatars) Do(s interfaces.Simulatorer) error {
	defer close(a.Done)
	for key := range s.Avatars() {
		a.Names = append(a.Names, key)
	}
	a.Done <- true
	return nil
}
+7 −0
Original line number Diff line number Diff line
package interfaces

// Actioner ...
type Actioner interface {
	Name() string
	Do(Simulatorer) error
}
+10 −0
Original line number Diff line number Diff line
package interfaces

// Avatarer ...
type Avatarer interface {
	Name() string
	SetName(string) string
	Run()
	Stop()
	Done() chan bool
}
Loading