handle player's last access time
This commit is contained in:
parent
257c0975fb
commit
34132c7703
@ -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 {
|
||||
|
16
server/src/application/playerATime.go
Normal file
16
server/src/application/playerATime.go
Normal 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()
|
||||
}
|
@ -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
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
// }
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user