core/internal/domain/player_message_payloads.go

78 lines
1.6 KiB
Go

package domain
import (
"math"
"net/url"
)
type PlayersSyncedEventPayload struct {
serverKey string
serverURL *url.URL
versionCode string
numPlayers int
}
const playersSyncedEventPayloadModelName = "PlayersSyncedEventPayload"
func NewPlayersSyncedEventPayload(
serverKey string,
serverURL *url.URL,
versionCode string,
numPlayers int,
) (PlayersSyncedEventPayload, error) {
if serverKey == "" {
return PlayersSyncedEventPayload{}, ValidationError{
Model: playersSyncedEventPayloadModelName,
Field: "serverKey",
Err: ErrRequired,
}
}
if serverURL == nil {
return PlayersSyncedEventPayload{}, ValidationError{
Model: playersSyncedEventPayloadModelName,
Field: "serverURL",
Err: ErrNil,
}
}
if versionCode == "" {
return PlayersSyncedEventPayload{}, ValidationError{
Model: playersSyncedEventPayloadModelName,
Field: "versionCode",
Err: ErrRequired,
}
}
if err := validateIntInRange(numPlayers, 0, math.MaxInt); err != nil {
return PlayersSyncedEventPayload{}, ValidationError{
Model: playersSyncedEventPayloadModelName,
Field: "numPlayers",
Err: err,
}
}
return PlayersSyncedEventPayload{
serverKey: serverKey,
serverURL: serverURL,
versionCode: versionCode,
numPlayers: numPlayers,
}, nil
}
func (p PlayersSyncedEventPayload) ServerKey() string {
return p.serverKey
}
func (p PlayersSyncedEventPayload) ServerURL() *url.URL {
return p.serverURL
}
func (p PlayersSyncedEventPayload) VersionCode() string {
return p.versionCode
}
func (p PlayersSyncedEventPayload) NumPlayers() int {
return p.numPlayers
}