core/internal/domain/village_message_payloads.go

156 lines
3.5 KiB
Go

package domain
import (
"math"
"net/url"
)
type VillagesSyncedEventPayload struct {
serverKey string
serverURL *url.URL
versionCode string
numVillages int
numPlayerVillages int
numBarbarianVillages int
numBonusVillages int
}
const villagesSyncedEventPayloadModelName = "VillagesSyncedEventPayload"
func NewVillagesSyncedEventPayload(
serverKey string,
serverURL *url.URL,
versionCode string,
numVillages int,
numPlayerVillages int,
numBarbarianVillages int,
numBonusVillages int,
) (VillagesSyncedEventPayload, error) {
if serverKey == "" {
return VillagesSyncedEventPayload{}, ValidationError{
Model: villagesSyncedEventPayloadModelName,
Field: "serverKey",
Err: ErrRequired,
}
}
if serverURL == nil {
return VillagesSyncedEventPayload{}, ValidationError{
Model: villagesSyncedEventPayloadModelName,
Field: "serverURL",
Err: ErrNil,
}
}
if versionCode == "" {
return VillagesSyncedEventPayload{}, ValidationError{
Model: villagesSyncedEventPayloadModelName,
Field: "versionCode",
Err: ErrRequired,
}
}
if err := validateIntInRange(numVillages, 0, math.MaxInt); err != nil {
return VillagesSyncedEventPayload{}, ValidationError{
Model: villagesSyncedEventPayloadModelName,
Field: "numVillages",
Err: err,
}
}
if err := validateIntInRange(numPlayerVillages, 0, math.MaxInt); err != nil {
return VillagesSyncedEventPayload{}, ValidationError{
Model: villagesSyncedEventPayloadModelName,
Field: "numPlayerVillages",
Err: err,
}
}
if err := validateIntInRange(numBarbarianVillages, 0, math.MaxInt); err != nil {
return VillagesSyncedEventPayload{}, ValidationError{
Model: villagesSyncedEventPayloadModelName,
Field: "numBarbarianVillages",
Err: err,
}
}
if err := validateIntInRange(numBonusVillages, 0, math.MaxInt); err != nil {
return VillagesSyncedEventPayload{}, ValidationError{
Model: villagesSyncedEventPayloadModelName,
Field: "numBonusVillages",
Err: err,
}
}
return VillagesSyncedEventPayload{
serverKey: serverKey,
serverURL: serverURL,
versionCode: versionCode,
numVillages: numVillages,
numPlayerVillages: numPlayerVillages,
numBarbarianVillages: numBarbarianVillages,
numBonusVillages: numBonusVillages,
}, nil
}
func NewVillagesSyncedEventPayloadFromVillages(
serverKey string,
serverURL *url.URL,
versionCode string,
villages BaseVillages,
) (VillagesSyncedEventPayload, error) {
numPlayerVillages := 0
numBarbarianVillages := 0
numBonusVillages := 0
for _, v := range villages {
if v.PlayerID() > 0 {
numPlayerVillages++
} else {
numBarbarianVillages++
}
if v.Bonus() > 0 {
numBonusVillages++
}
}
return NewVillagesSyncedEventPayload(
serverKey,
serverURL,
versionCode,
len(villages),
numPlayerVillages,
numBarbarianVillages,
numBonusVillages,
)
}
func (p VillagesSyncedEventPayload) ServerKey() string {
return p.serverKey
}
func (p VillagesSyncedEventPayload) ServerURL() *url.URL {
return p.serverURL
}
func (p VillagesSyncedEventPayload) VersionCode() string {
return p.versionCode
}
func (p VillagesSyncedEventPayload) NumVillages() int {
return p.numVillages
}
func (p VillagesSyncedEventPayload) NumPlayerVillages() int {
return p.numPlayerVillages
}
func (p VillagesSyncedEventPayload) NumBarbarianVillages() int {
return p.numBarbarianVillages
}
func (p VillagesSyncedEventPayload) NumBonusVillages() int {
return p.numBonusVillages
}