handle player's last access time

This commit is contained in:
Settel 2021-08-09 11:16:30 +02:00
parent 257c0975fb
commit 34132c7703
6 changed files with 67 additions and 46 deletions

View File

@ -4,13 +4,15 @@ import (
"sirlab.de/go/knyt/applicationConfig"
"sirlab.de/go/knyt/game"
"sirlab.de/go/knyt/user"
"time"
)
func NewApplication(config applicationConfig.ApplicationConfig) (*Application, error) {
app := Application{
config: config,
users: make(map[string]*user.User),
games: make(map[string]*game.Game),
config: config,
users: make(map[string]*user.User),
games: make(map[string]*game.Game),
playerATime: make(map[string]time.Time),
}
if err := app.loadUsers(); err != nil {

View File

@ -0,0 +1,16 @@
package application
import (
"fmt"
"sirlab.de/go/knyt/user"
"time"
)
func (app *Application) updatePlayerATime(usr *user.User) {
usrId := usr.GetId()
app.mu.Lock()
fmt.Printf("updatePlayerATime \"%v\"\n", app.playerATime[usrId])
app.playerATime[usrId] = time.Now()
app.mu.Unlock()
}

View File

@ -5,11 +5,13 @@ import (
"sirlab.de/go/knyt/game"
"sirlab.de/go/knyt/user"
"sync"
"time"
)
type Application struct {
mu sync.Mutex
config applicationConfig.ApplicationConfig
users map[string]*user.User
games map[string]*game.Game
mu sync.Mutex
config applicationConfig.ApplicationConfig
users map[string]*user.User
games map[string]*game.Game
playerATime map[string]time.Time
}

View File

@ -21,7 +21,7 @@ func (app *Application) SyncHandler(usr *user.User, w http.ResponseWriter, r *ht
return
}
gm.UpdatePlayerTimestamp(usr)
app.updatePlayerATime(usr)
eng := gm.GetEngine()
eng.SyncHandler(w, r)

View File

@ -5,8 +5,6 @@ import (
"fmt"
"os"
"sirlab.de/go/knyt/engine"
"sirlab.de/go/knyt/user"
"time"
)
func NewGameFromFile(id, fileName string) (*Game, error) {
@ -20,10 +18,9 @@ func NewGameFromFile(id, fileName string) (*Game, error) {
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),
id: id,
name: gmJson.Name,
eng: engine.NewEngine(id),
}
go gm.eng.Run()
@ -33,36 +30,42 @@ func NewGameFromFile(id, fileName string) (*Game, error) {
}
func (gm *Game) GetId() string {
gm.mu.Lock()
defer gm.mu.Unlock()
return gm.id
}
func (gm *Game) GetName() string {
gm.mu.Lock()
defer gm.mu.Unlock()
return gm.name
}
func (gm *Game) GetEngine() *engine.Engine {
gm.mu.Lock()
defer gm.mu.Unlock()
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
}
// 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
// }

View File

@ -3,15 +3,13 @@ package game
import (
"sirlab.de/go/knyt/engine"
"sync"
"time"
)
type Game struct {
mu sync.Mutex
id string
name string
eng *engine.Engine
playerTimestamp map[string]time.Time
mu sync.Mutex
id string
name string
eng *engine.Engine
}
type GameJson struct {