multiserver/player.go

54 lines
1.2 KiB
Go
Raw Normal View History

2021-01-14 07:54:30 -08:00
package multiserver
2021-01-14 10:06:40 -08:00
import "sync"
var onlinePlayers map[string]bool
var onlinePlayerMu sync.RWMutex
2021-01-14 08:09:06 -08:00
var onJoinPlayer []func(*Peer)
2021-01-14 07:54:30 -08:00
var onLeavePlayer []func(*Peer)
2021-01-17 12:43:23 -08:00
// RegisterOnJoinPlayer registers a callback function that is called
// when a TOSERVER_CLIENT_READY pkt is received from the Peer
2021-01-14 07:54:30 -08:00
func RegisterOnJoinPlayer(function func(*Peer)) {
onJoinPlayer = append(onJoinPlayer, function)
}
2021-01-17 12:43:23 -08:00
// RegisterOnLeavePlayer registers a callback function that is called
// when a client Peer disconnects
2021-01-14 07:54:30 -08:00
func RegisterOnLeavePlayer(function func(*Peer)) {
onLeavePlayer = append(onLeavePlayer, function)
}
func processJoin(p *Peer) {
2021-01-14 10:06:40 -08:00
onlinePlayerMu.Lock()
defer onlinePlayerMu.Unlock()
onlinePlayers[string(p.username)] = true
2021-01-14 07:54:30 -08:00
for i := range onJoinPlayer {
2021-01-14 08:09:06 -08:00
onJoinPlayer[i](p)
2021-01-14 07:54:30 -08:00
}
}
func processLeave(p *Peer) {
2021-01-14 10:06:40 -08:00
onlinePlayerMu.Lock()
defer onlinePlayerMu.Unlock()
onlinePlayers[string(p.username)] = false
2021-01-14 07:54:30 -08:00
for i := range onLeavePlayer {
2021-01-14 08:09:06 -08:00
onLeavePlayer[i](p)
2021-01-14 07:54:30 -08:00
}
}
2021-01-14 10:06:40 -08:00
2021-01-17 12:43:23 -08:00
// IsOnline reports if a player is connected
2021-01-14 10:06:40 -08:00
func IsOnline(name string) bool {
onlinePlayerMu.RLock()
defer onlinePlayerMu.RUnlock()
return onlinePlayers[name]
}
func init() {
onlinePlayers = make(map[string]bool)
}