diff options
| author | bt <bt@rctt.net> | 2026-04-10 19:31:31 +0200 |
|---|---|---|
| committer | bt <bt@rctt.net> | 2026-04-18 22:33:20 +0200 |
| commit | e9aebac1a2a4732763c2f7e4428a23983d4eb6a3 (patch) | |
| tree | b66ea36939ea75360ed6c554cf352348d19786bb /server/message.go | |
| parent | f66e28aa88a5f4176934001fa9e4967ddccde4a9 (diff) | |
| download | solec-e9aebac1a2a4732763c2f7e4428a23983d4eb6a3.tar.gz solec-e9aebac1a2a4732763c2f7e4428a23983d4eb6a3.zip | |
[common] Exchange messages between servers
Diffstat (limited to 'server/message.go')
| -rw-r--r-- | server/message.go | 37 |
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) +} |
