impl server side
This commit is contained in:
75
src/server/game.go
Normal file
75
src/server/game.go
Normal file
@@ -0,0 +1,75 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Game struct {
|
||||
Pot Currency
|
||||
Players [16]Player
|
||||
}
|
||||
|
||||
type Player struct {
|
||||
ID string
|
||||
Name string
|
||||
Card string
|
||||
Balance Currency
|
||||
}
|
||||
|
||||
type Currency int
|
||||
|
||||
func (game Game) GetPlayers() []Player {
|
||||
players := []Player{}
|
||||
for _, player := range game.Players {
|
||||
if !player.Empty() {
|
||||
players = append(players, player)
|
||||
}
|
||||
}
|
||||
return players
|
||||
}
|
||||
|
||||
func (p Player) Empty() bool {
|
||||
return p == (Player{})
|
||||
}
|
||||
|
||||
func (c Currency) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(fmt.Sprintf(`$%v.%02d`, c/100, c%100))
|
||||
}
|
||||
|
||||
func (c *Currency) UnmarshalJSON(b []byte) error {
|
||||
var s string
|
||||
if err := json.Unmarshal(b, &s); err != nil {
|
||||
return err
|
||||
}
|
||||
re := regexp.MustCompile(`^\$([0-9]+(\.[0-9][0-9])?|\.[0-9]{2})$`)
|
||||
if !re.MatchString(s) {
|
||||
return fmt.Errorf("illegal currency format: %q", s)
|
||||
}
|
||||
s = strings.TrimPrefix(s, "$")
|
||||
dollars := strings.Split(s, ".")[0]
|
||||
cents := strings.TrimPrefix(s, dollars+".")
|
||||
if !strings.HasPrefix(s, dollars+".") {
|
||||
cents = "0"
|
||||
}
|
||||
if dollars == "" {
|
||||
dollars = "0"
|
||||
}
|
||||
if cents == "00" {
|
||||
cents = "0"
|
||||
}
|
||||
dI, err := strconv.Atoi(dollars)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
cI, err := strconv.Atoi(cents)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c2 := Currency(dI*100 + cI)
|
||||
*c = c2
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user