summaryrefslogtreecommitdiff
path: root/internal/server
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-10-16 16:10:26 +0300
committerKyren223 <ulmliad223@gmail.com>2024-10-16 16:10:26 +0300
commitc35f2705dcebfae66ba293371332ab5867e703da (patch)
tree9aeb2edc5e6dbd2ff2cc16783f27c095054e9d24 /internal/server
parentcf105501c7eafb6e08e46d9674de61e3e849a45a (diff)
feat: basic messaging between client and server
Diffstat (limited to 'internal/server')
-rw-r--r--internal/server/handler.go48
1 files changed, 43 insertions, 5 deletions
diff --git a/internal/server/handler.go b/internal/server/handler.go
index 61ecbae..cf1eb82 100644
--- a/internal/server/handler.go
+++ b/internal/server/handler.go
@@ -9,8 +9,9 @@ import (
"sync"
"time"
+ "github.com/kyren223/eko/internal/data"
"github.com/kyren223/eko/internal/packet"
- "github.com/kyren223/eko/pkg/assert"
+ "github.com/kyren223/eko/pkg/snowflake"
)
func handleConnection(conn net.Conn, wg *sync.WaitGroup) {
@@ -42,6 +43,9 @@ outer:
}
case err := <-outErr:
+ if err == nil {
+ continue
+ }
if err == packet.PacketUnsupportedEncoding {
err := unsupportedEncodingErrorPacket.Into(conn)
log.Printf("client %v: error writing unsupported encoding packet: %v\n", conn.RemoteAddr().String(), err)
@@ -74,11 +78,45 @@ func handlePacket(pkt packet.Packet) (packet.Packet, error) {
return packet.Packet{}, fmt.Errorf("encode error: %v", err)
}
return packet.NewPacket(encoder), nil
+ case packet.TypeSendMessage:
+ var request packet.SendMessageMessage
+ if err := pkt.DecodePayload(&request); err != nil {
+ return packet.Packet{}, fmt.Errorf("decode error: %v", err)
+ }
- case packet.TypeError:
- return packet.Packet{}, errors.New("TODO: not implemented yet")
+ message := data.Message{
+ Id: node.Generate(),
+ SenderId: node.Generate(),
+ FrequencyId: node.Generate(),
+ NetworkId: node.Generate(),
+ Contents: request.Content,
+ }
+ messages = append(messages, message)
+
+ response := packet.EkoMessage{Message: "Eko OK"}
+ encoder, err := packet.NewMsgPackEncoder(&response)
+ if err != nil {
+ return packet.Packet{}, fmt.Errorf("encode error: %v", err)
+ }
+ return packet.NewPacket(encoder), nil
+ case packet.TypeGetMessages:
+ var request packet.GetMessagesMessage
+ if err := pkt.DecodePayload(&request); err != nil {
+ return packet.Packet{}, fmt.Errorf("decode error: %v", err)
+ }
+
+ response := packet.MessagesMessage{Messages: messages}
+ encoder, err := packet.NewMsgPackEncoder(&response)
+ if err != nil {
+ return packet.Packet{}, fmt.Errorf("encode error: %v", err)
+ }
+ return packet.NewPacket(encoder), nil
default:
- assert.Unreachable("type should be checked for validity before handler, packet = %v", pkt.String())
- return packet.Packet{}, nil
+ return packet.Packet{}, errors.New("TODO: not implemented yet")
}
}
+
+var (
+ node = snowflake.NewNode(1)
+ messages []data.Message = make([]data.Message, 10)
+)