156 lines
3.5 KiB
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
|
|
}
|