summaryrefslogtreecommitdiff
path: root/server/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/server.go')
-rw-r--r--server/server.go24
1 files changed, 7 insertions, 17 deletions
diff --git a/server/server.go b/server/server.go
index d6e39f2..557abac 100644
--- a/server/server.go
+++ b/server/server.go
@@ -41,6 +41,7 @@ type Server struct {
phony.Inbox
worldState
info ServerInfo
+ Chat gameChat
clients map[*client]bool
players map[string]*player
listIds map[listId]string
@@ -73,6 +74,7 @@ func NewServer(info ServerInfo) *Server {
players: make(map[string]*player),
listIds: make(map[listId]string),
playerList: make(map[string]listEntry),
+ Chat: gameChat {members: make(map[chatListener]bool)},
levels: make(map[levelId]*level),
stopped: make(chan struct{}),
}
@@ -219,18 +221,11 @@ func (s *Server) OnDisconnect(cl *client) {
func (s *Server) OnLeave(pl *player, username string) {
s.Act(pl, func() {
- s.Broadcast(nil, fmt.Sprintf("&e%s has left", username))
+ s.Chat.Send(s, nil, fmt.Sprintf("&e%s has left", username))
if s.players[username] == pl {
delete(s.players, username)
s.removeListEntry(username)
- }
- })
-}
-
-func (s *Server) OnPlayerMessage(from *player, name string, message string) {
- s.Act(from, func() {
- for _, player := range s.players {
- player.OnPlayerMessage(s, name, message)
+ s.Chat.RemoveMember(s, pl)
}
})
}
@@ -241,7 +236,7 @@ func (s *Server) OnLoadError(from phony.Actor, err error) {
func (s *Server) OnSaveError(from phony.Actor, err error) {
log.Printf("error saving world: %s", err)
- s.Broadcast(from, fmt.Sprintf("&4Error saving world: %s", err))
+ s.Chat.Send(s, nil, fmt.Sprintf("&4Error saving world: %s", err))
}
func (s *Server) Tick() {
@@ -270,6 +265,7 @@ func (s *Server) newPlayer(
for _, entry := range s.playerList {
pl.OnAddListEntry(s, entry)
}
+ s.Chat.AddMember(s, pl)
return pl
}
@@ -328,7 +324,7 @@ func (s *Server) NewPlayer(
cl.Disconnect(s, banReason)
return
}
- s.Broadcast(nil, fmt.Sprintf("&e%s has joined", name))
+ s.Chat.Send(s, nil, fmt.Sprintf("&e%s has joined", name))
log.Printf("%s has joined", name)
if s.players[name] != nil {
s.players[name].Act(s, func() {
@@ -404,12 +400,6 @@ func (s *Server) GetPlayer(
})
}
-func (s *Server) Broadcast(from phony.Actor, message string) {
- for _, player := range s.players {
- player.SendMessage(s, message)
- }
-}
-
type client struct {
phony.Inbox
server *Server