summaryrefslogtreecommitdiff
path: root/internal/server/api
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-10-24 18:13:39 +0300
committerKyren223 <ulmliad223@gmail.com>2024-10-24 18:13:39 +0300
commita7f743f035d0f0d14400027e4781cad76503085a (patch)
tree31c021ef76e7ca0428c5bca6b2aa2b23697f4f4c /internal/server/api
parent688668f6d34d4d962247bd5df60c3fca61185927 (diff)
refactor: server split into server, session and api
Diffstat (limited to 'internal/server/api')
-rw-r--r--internal/server/api/api.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go
new file mode 100644
index 0000000..4596cdb
--- /dev/null
+++ b/internal/server/api/api.go
@@ -0,0 +1,40 @@
+package api
+
+import (
+ "context"
+ "strings"
+
+ "github.com/kyren223/eko/internal/data"
+ "github.com/kyren223/eko/internal/packet"
+ "github.com/kyren223/eko/internal/server/session"
+ "github.com/kyren223/eko/pkg/assert"
+)
+
+func SendMessage(ctx context.Context, request *packet.SendMessage) packet.Payload {
+ sess, ok := session.FromContext(ctx)
+ assert.Assert(ok, "context in process packet should always have a session")
+
+ 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)
+
+ payload := &packet.Messages{Messages: messages}
+ pkt := packet.NewPacket(packet.NewMsgPackEncoder(payload))
+ sess.WriteQueue <- pkt
+
+ return packet.NewOkMessage()
+}
+
+var messages []data.Message