summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/api/api.go35
-rw-r--r--internal/server/api/database.go35
2 files changed, 55 insertions, 15 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
index cf072f3..8f9e6c6 100644
--- a/internal/server/api/api.go
+++ b/internal/server/api/api.go
@@ -2,6 +2,7 @@ package api
import (
"context"
+ "log"
"strings"
"github.com/kyren223/eko/internal/data"
@@ -14,28 +15,32 @@ func SendMessage(ctx context.Context, request *packet.SendMessage) packet.Payloa
sess, ok := session.FromContext(ctx)
assert.Assert(ok, "context in process packet should always have a session")
+ if (request.ReceiverID != nil) != (request.FrequencyID != nil) {
+ return &packet.ErrorMessage{Error: "either receiver id or frequency id must exist"}
+ }
+
content := strings.TrimSpace(request.Content)
if content == "" {
return &packet.ErrorMessage{Error: "message content must not be blank"}
}
node := sess.Manager().Node()
- message := data.Message{
- Id: node.Generate(),
- SenderId: sess.ID(),
- FrequencyId: node.Generate(), // TODO: replace with actual ID
- NetworkId: node.Generate(), // TODO: replace with actual ID
- Contents: content,
- }
- messages = append(messages, message)
-
- // TODO: broadcast message
- payload := &packet.Messages{Messages: messages}
- pkt := packet.NewPacket(packet.NewMsgPackEncoder(payload))
- sess.WriteQueue <- pkt
+ queries := data.New(db)
+ message, err := queries.CreateMessage(ctx, data.CreateMessageParams{
+ ID: node.Generate(),
+ SenderID: sess.ID(),
+ Content: content,
+ FrequencyID: request.FrequencyID,
+ ReceiverID: request.ReceiverID,
+ })
+ if err != nil {
+ log.Println(sess.Addr(), "SendMessage database error:", err)
+ return &packet.ErrorMessage{Error: "internal server error"}
+ }
- return packet.NewOkMessage()
+ return &packet.Messages{Messages: []data.Message{message}}
}
-var messages []data.Message
+func GetMessages(ctx context.Context, request *packet.GetMessagesRange) packet.Payload {
+}
diff --git a/internal/server/api/database.go b/internal/server/api/database.go
new file mode 100644
index 0000000..7057393
--- /dev/null
+++ b/internal/server/api/database.go
@@ -0,0 +1,35 @@
+package api
+
+import (
+ "database/sql"
+ "log"
+
+ "github.com/kyren223/eko/pkg/assert"
+)
+
+var db *sql.DB
+
+func ConnectToDatabase() {
+ db, err := sql.Open("sqlite3", "server.db")
+ assert.NoError(err, "DB should always be accessible")
+ assert.AddFlush(db)
+ log.Println("established connection with the database")
+
+ pragmas := []string{
+ "PRAGMA journal_mode = WAL;",
+ "PRAGMA synchronous = NORMAL;",
+ "PRAGMA temp_store = MEMORY;",
+ "PRAGMA mmap_size = 30000000000;",
+ }
+ for _, pragma := range pragmas {
+ _, err := db.Exec(pragma)
+ assert.NoError(err, "DB pragmas should always execute with no errors")
+ }
+
+ log.Println("database connection ready to be used")
+}
+
+func CloseDatabase() {
+ db.Close()
+ log.Println("connection with database closed")
+}