summaryrefslogtreecommitdiffstats
path: root/server/message.go
diff options
context:
space:
mode:
Diffstat (limited to 'server/message.go')
-rw-r--r--server/message.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/server/message.go b/server/message.go
index c1384f7..2487abd 100644
--- a/server/message.go
+++ b/server/message.go
@@ -1,6 +1,8 @@
package server
import (
+ "errors"
+ "fmt"
"log"
"time"
@@ -27,3 +29,38 @@ func (s *Server) SendBroadcast(msg string) {
}
}
}
+
+func (s *Server) handleMessage(msg core.Message) error {
+ log.Println("message:", msg.Source, "->", msg.Target, msg.Content)
+
+ channel, host, err := core.ReadAddr(msg.Target)
+ if err != nil {
+ return err
+ }
+
+ if host == s.name {
+ return s.handleLocalMessage(channel, msg)
+ }
+
+ return s.handleOutboundMessage(channel, host, msg)
+}
+
+func (s *Server) handleLocalMessage(channel string, msg core.Message) error {
+ s.usersMu.RLock()
+ user, ok := s.users[channel]
+ if !ok {
+ return errors.New("target not found")
+ }
+ s.usersMu.RUnlock()
+
+ return user.Send(msg)
+}
+
+func (s *Server) handleOutboundMessage(channel, host string, msg core.Message) error {
+ remote, err := s.getRemote(host)
+ if err != nil {
+ return fmt.Errorf("cannot access remote server: %w", err)
+ }
+
+ return core.Send(remote.Conn, msg)
+}