summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/daemon/main.go16
-rw-r--r--server/message.go2
-rw-r--r--server/server.go4
-rw-r--r--storage/storage.go12
4 files changed, 29 insertions, 5 deletions
diff --git a/cmd/daemon/main.go b/cmd/daemon/main.go
index 242a45a..10fb61c 100644
--- a/cmd/daemon/main.go
+++ b/cmd/daemon/main.go
@@ -9,6 +9,7 @@ import (
"os"
"slices"
"strings"
+ "time"
"go.rctt.net/solec/server"
"go.rctt.net/solec/storage"
@@ -19,6 +20,7 @@ import (
var (
cmds = map[string]func(args []string){
"broadcast": sendBroadcast,
+ "read": readHistory,
"exit": exit,
}
serv *server.Server
@@ -74,6 +76,20 @@ func sendBroadcast(args []string) {
serv.SendBroadcast(msg)
}
+func readHistory(args []string) {
+ if len(args) != 1 {
+ fmt.Println("usage: read <channel>")
+ }
+
+ hist, err := serv.Storage.Read(args[0], time.Time{}, 999999, 0)
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+
+ fmt.Println(hist)
+}
+
func exit(args []string) {
os.Exit(0)
}
diff --git a/server/message.go b/server/message.go
index cd5add6..b8b0631 100644
--- a/server/message.go
+++ b/server/message.go
@@ -42,7 +42,7 @@ func (s *Server) handleMessage(sender net.Conn, connType core.ConnType, msg core
return err
}
- if err := s.storage.Write(msg); err != nil {
+ if err := s.Storage.Write(msg); err != nil {
log.Println("cannot write to database", err)
}
diff --git a/server/server.go b/server/server.go
index 74328a4..58714c5 100644
--- a/server/server.go
+++ b/server/server.go
@@ -18,7 +18,7 @@ type Server struct {
usersMu sync.RWMutex
serversMu sync.RWMutex
channelsMu sync.RWMutex
- storage Storage
+ Storage Storage
}
func NewServer(listenAddr string, name string, storage Storage) *Server {
@@ -28,7 +28,7 @@ func NewServer(listenAddr string, name string, storage Storage) *Server {
users: make(map[string]User),
servers: make(map[string]RemoteServer),
channels: make(map[string]*Channel),
- storage: storage,
+ Storage: storage,
}
}
diff --git a/storage/storage.go b/storage/storage.go
index 9207761..0103370 100644
--- a/storage/storage.go
+++ b/storage/storage.go
@@ -3,6 +3,7 @@ package storage
import (
"database/sql"
"fmt"
+ "log"
"time"
"go.rctt.net/solec/core"
@@ -43,7 +44,11 @@ func (db *Database) Read(channel string, since time.Time, num int, offset int) (
"SELECT source, target, timestamp, content FROM messages WHERE timestamp > ? LIMIT ? OFFSET ?",
since.Unix(), num, offset,
)
- defer rows.Close()
+ defer func() {
+ if err := rows.Close(); err != nil {
+ log.Println("cannot close database row:", err)
+ }
+ }()
if err != nil {
return history, err
@@ -51,9 +56,12 @@ func (db *Database) Read(channel string, since time.Time, num int, offset int) (
for rows.Next() {
var msg core.Message
- if err := rows.Scan(&msg.Source, &msg.Target, &msg.Timestamp, &msg.Content); err != nil {
+ var timestamp int64
+ if err := rows.Scan(&msg.Source, &msg.Target, &timestamp, &msg.Content); err != nil {
return history, err
}
+ msg.Timestamp = time.Unix(timestamp, 0)
+
history = append(history, msg)
}