diff options
| -rw-r--r-- | cmd/daemon/main.go | 16 | ||||
| -rw-r--r-- | server/message.go | 2 | ||||
| -rw-r--r-- | server/server.go | 4 | ||||
| -rw-r--r-- | storage/storage.go | 12 |
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, ×tamp, &msg.Content); err != nil { return history, err } + msg.Timestamp = time.Unix(timestamp, 0) + history = append(history, msg) } |
