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/applicationConfig"
"sirlab.de/go/knyt/game" "sirlab.de/go/knyt/game"
"sirlab.de/go/knyt/user" "sirlab.de/go/knyt/user"
"time"
) )
func NewApplication(config applicationConfig.ApplicationConfig) (*Application, error) { func NewApplication(config applicationConfig.ApplicationConfig) (*Application, error) {
app := Application{ app := Application{
config: config, config: config,
users: make(map[string]*user.User), users: make(map[string]*user.User),
games: make(map[string]*game.Game), games: make(map[string]*game.Game),
playerATime: make(map[string]time.Time),
} }
if err := app.loadUsers(); err != nil { 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/game"
"sirlab.de/go/knyt/user" "sirlab.de/go/knyt/user"
"sync" "sync"
"time"
) )
type Application struct { type Application struct {
mu sync.Mutex mu sync.Mutex
config applicationConfig.ApplicationConfig config applicationConfig.ApplicationConfig
users map[string]*user.User users map[string]*user.User
games map[string]*game.Game 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 return
} }
gm.UpdatePlayerTimestamp(usr) app.updatePlayerATime(usr)
eng := gm.GetEngine() eng := gm.GetEngine()
eng.SyncHandler(w, r) eng.SyncHandler(w, r)

View File

@ -5,8 +5,6 @@ import (
"fmt" "fmt"
"os" "os"
"sirlab.de/go/knyt/engine" "sirlab.de/go/knyt/engine"
"sirlab.de/go/knyt/user"
"time"
) )
func NewGameFromFile(id, fileName string) (*Game, error) { 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) return nil, fmt.Errorf("%s: %v\n", fileName, err)
} else { } else {
gm := Game{ gm := Game{
id: id, id: id,
name: gmJson.Name, name: gmJson.Name,
eng: engine.NewEngine(id), eng: engine.NewEngine(id),
playerTimestamp: make(map[string]time.Time),
} }
go gm.eng.Run() go gm.eng.Run()
@ -33,36 +30,42 @@ func NewGameFromFile(id, fileName string) (*Game, error) {
} }
func (gm *Game) GetId() string { func (gm *Game) GetId() string {
gm.mu.Lock()
defer gm.mu.Unlock()
return gm.id return gm.id
} }
func (gm *Game) GetName() string {
gm.mu.Lock()
defer gm.mu.Unlock()
return gm.name
}
func (gm *Game) GetEngine() *engine.Engine { func (gm *Game) GetEngine() *engine.Engine {
gm.mu.Lock()
defer gm.mu.Unlock()
return gm.eng return gm.eng
} }
func (gm *Game) UpdatePlayerTimestamp(usr *user.User) { // func (gm *Game) GetActivePlayers() []string {
gm.mu.Lock() // gm.mu.Lock()
defer gm.mu.Unlock() // defer gm.mu.Unlock()
//
gm.playerTimestamp[usr.GetId()] = time.Now() // players := make([]string, 0)
} //
// now := time.Now()
func (gm *Game) GetActivePlayers() []string { // for usrId, timestamp := range gm.playerTimestamp {
gm.mu.Lock() // elapsed := now.Sub(timestamp)
defer gm.mu.Unlock() //
// fmt.Printf("%s: %.0f\n", usrId, elapsed.Seconds())
players := make([]string, 0) //
// if elapsed.Seconds() < 30.0 {
now := time.Now() // players = append(players, usrId)
for usrId, timestamp := range gm.playerTimestamp { // }
elapsed := now.Sub(timestamp) // }
//
fmt.Printf("%s: %.0f\n", usrId, elapsed.Seconds()) // return players
// }
if elapsed.Seconds() < 30.0 {
players = append(players, usrId)
}
}
return players
}

View File

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