summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-05-16 17:46:36 +0200
committerbt <bt@rctt.net>2026-05-16 22:46:48 +0200
commit3169d07cc6514280ad3e51d1c6c78802b06b9f57 (patch)
tree4f8db6ffb0b580d0d92f447e71940fa3c160b376 /server
parent83be96382f60235ce3051dda30d1358e389332a7 (diff)
downloadsolec-3169d07cc6514280ad3e51d1c6c78802b06b9f57.tar.gz
solec-3169d07cc6514280ad3e51d1c6c78802b06b9f57.zip
Save messages in a database
Diffstat (limited to 'server')
-rw-r--r--server/message.go4
-rw-r--r--server/server.go6
-rw-r--r--server/storage.go12
3 files changed, 20 insertions, 2 deletions
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)
+}