From 3169d07cc6514280ad3e51d1c6c78802b06b9f57 Mon Sep 17 00:00:00 2001 From: bt Date: Sat, 16 May 2026 17:46:36 +0200 Subject: Save messages in a database --- server/message.go | 4 ++++ server/server.go | 6 ++++-- server/storage.go | 12 ++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 server/storage.go (limited to 'server') diff --git a/server/message.go b/server/message.go index 58f2908..11644dc 100644 --- a/server/message.go +++ b/server/message.go @@ -38,6 +38,10 @@ func (s *Server) handleMessage(sender net.Conn, msg core.Message) error { return err } + if err := s.storage.Write(msg); err != nil { + log.Println("cannot write to database", err) + } + if addr.Host == s.name { return s.handleLocalMessage(sender, addr, msg) } diff --git a/server/server.go b/server/server.go index ef2bb5f..74328a4 100644 --- a/server/server.go +++ b/server/server.go @@ -18,15 +18,17 @@ type Server struct { usersMu sync.RWMutex serversMu sync.RWMutex channelsMu sync.RWMutex + storage Storage } -func NewServer(listenAddr string, name string) *Server { +func NewServer(listenAddr string, name string, storage Storage) *Server { return &Server{ listenAddr: listenAddr, name: name, users: make(map[string]User), servers: make(map[string]RemoteServer), channels: make(map[string]*Channel), + storage: storage, } } @@ -50,7 +52,7 @@ func (s *Server) Start() error { func (s *Server) AddChannel(name string) { s.channelsMu.Lock() - s.channelsMu.Unlock() + defer s.channelsMu.Unlock() s.channels[name] = NewChannel(name) log.Println("created channel", name) } diff --git a/server/storage.go b/server/storage.go new file mode 100644 index 0000000..3473898 --- /dev/null +++ b/server/storage.go @@ -0,0 +1,12 @@ +package server + +import ( + "time" + + "go.rctt.net/solec/core" +) + +type Storage interface { + Write(msg core.Message) (err error) + Read(channel string, since time.Time, num, offset int) (history []core.Message, err error) +} -- cgit v1.2.3