package handlers import ( "fmt" "github.com/aziis98/lupus-lite/events" "github.com/aziis98/lupus-lite/lupus" "github.com/aziis98/lupus-lite/model" ) func OnPlayerJoin(partitaUid string) string { return fmt.Sprintf("@join partita[uid=%q]", partitaUid) } type PartitaConfig struct { NumGiocatori int NumLupi int NumFattucchiere int NumGuardie int NumCacciatori int NumMedium int NumVeggenti int } type PartiteHandler interface { EventBus() *events.EventBus Create(ownerId string, cfg PartitaConfig) (model.Partita, error) GetPlayers(partitaUid string) ([]string, error) Join(partitaUid, username string) error } type partiteHandler struct { *server eventBus *events.EventBus } func (p *partiteHandler) Create(ownerId string, cfg PartitaConfig) (model.Partita, error) { return p.DB.CreatePartita(ownerId, model.PartitaConfig{ NumeroGiocatori: cfg.NumGiocatori, NumeroPerRuolo: map[string]int{ lupus.Lupo.Uid: cfg.NumLupi, lupus.Fattucchiera.Uid: cfg.NumFattucchiere, lupus.Guardia.Uid: cfg.NumGuardie, lupus.Cacciatore.Uid: cfg.NumCacciatori, lupus.Medium.Uid: cfg.NumMedium, lupus.Veggente.Uid: cfg.NumVeggenti, }, }) } func (p *partiteHandler) GetPlayers(partitaUid string) ([]string, error) { partita, err := p.DB.GetPartita(partitaUid) if err != nil { return nil, err } return partita.Players, nil } func (p *partiteHandler) Join(partitaUid, username string) error { partita, err := p.DB.GetPartita(partitaUid) if err != nil { return err } partita.Players = append(partita.Players, username) if err := p.DB.UpdatePartita(partita); err != nil { return err } p.eventBus.Dispatch(OnPlayerJoin(partitaUid), partita.Players) return nil } func (p *partiteHandler) EventBus() *events.EventBus { return p.eventBus }