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,6 +4,7 @@ import (
"sirlab.de/go/knyt/applicationConfig"
"sirlab.de/go/knyt/game"
"sirlab.de/go/knyt/user"
"time"
)
func NewApplication(config applicationConfig.ApplicationConfig) (*Application, error) {
@ -11,6 +12,7 @@ func NewApplication(config applicationConfig.ApplicationConfig) (*Application, e
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,6 +5,7 @@ import (
"sirlab.de/go/knyt/game"
"sirlab.de/go/knyt/user"
"sync"
"time"
)
type Application struct {
@ -12,4 +13,5 @@ type Application struct {
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) {
@ -23,7 +21,6 @@ func NewGameFromFile(id, fileName string) (*Game, error) {
id: id,
name: gmJson.Name,
eng: engine.NewEngine(id),
playerTimestamp: make(map[string]time.Time),
}
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,7 +3,6 @@ package game
import (
"sirlab.de/go/knyt/engine"
"sync"
"time"
)
type Game struct {
@ -11,7 +10,6 @@ type Game struct {
id string
name string
eng *engine.Engine
playerTimestamp map[string]time.Time
}
type GameJson struct {