summaryrefslogtreecommitdiff
path: root/server/chat.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/chat.go')
-rw-r--r--server/chat.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/server/chat.go b/server/chat.go
index 4206d66..8275c59 100644
--- a/server/chat.go
+++ b/server/chat.go
@@ -3,8 +3,38 @@ package server
import (
"strings"
"git.citrons.xyz/metronode/classic"
+ "git.citrons.xyz/metronode/phony"
)
+type gameChat struct {
+ phony.Inbox
+ members map[chatListener]bool
+}
+
+func (c *gameChat) AddMember(from phony.Actor, m chatListener) {
+ c.Act(from, func() {
+ c.members[m] = true
+ })
+}
+
+func (c *gameChat) RemoveMember(from phony.Actor, m chatListener) {
+ c.Act(from, func() {
+ delete(c.members, m)
+ })
+}
+
+func (c *gameChat) Send(from phony.Actor, messageSender any, message string) {
+ c.Act(from, func() {
+ for m := range c.members {
+ m.OnChatMessage(c, messageSender, message)
+ }
+ })
+}
+
+type chatListener interface {
+ OnChatMessage(from *gameChat, messageSender any, message string)
+}
+
func processChatMessage(message string) []classic.Packet {
var (
packets []classic.Packet