diff options
Diffstat (limited to 'internal/server/api')
| -rw-r--r-- | internal/server/api/api.go | 40 |
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 |
