knowyt/server/src/game/game.go
2021-08-09 10:36:19 +02:00

69 lines
1.2 KiB
Go

package game
import (
"encoding/json"
"fmt"
"os"
"sirlab.de/go/knyt/engine"
"sirlab.de/go/knyt/user"
"time"
)
func NewGameFromFile(id, fileName string) (*Game, error) {
jsonBytes, err := os.ReadFile(fileName)
if err != nil {
return nil, err
}
var gmJson GameJson
if err := json.Unmarshal(jsonBytes, &gmJson); err != nil {
return nil, fmt.Errorf("%s: %v\n", fileName, err)
} else {
gm := Game{
id: id,
name: gmJson.Name,
eng: engine.NewEngine(id),
playerTimestamp: make(map[string]time.Time),
}
go gm.eng.Run()
return &gm, nil
}
}
func (gm *Game) GetId() string {
return gm.id
}
func (gm *Game) GetEngine() *engine.Engine {
return gm.eng
}
func (gm *Game) UpdatePlayerTimestamp(usr *user.User) {
gm.mu.Lock()
defer gm.mu.Unlock()
gm.playerTimestamp[usr.GetId()] = time.Now()
}
func (gm *Game) GetActivePlayers() []string {
gm.mu.Lock()
defer gm.mu.Unlock()
players := make([]string, 0)
now := time.Now()
for usrId, timestamp := range gm.playerTimestamp {
elapsed := now.Sub(timestamp)
fmt.Printf("%s: %.0f\n", usrId, elapsed.Seconds())
if elapsed.Seconds() < 30.0 {
players = append(players, usrId)
}
}
return players
}