summaryrefslogtreecommitdiff
path: root/internal/client
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-10-15 21:59:08 +0300
committerKyren223 <ulmliad223@gmail.com>2024-10-15 21:59:08 +0300
commit260ad0e1bd0931956cf8c689e81fffc59d12e2aa (patch)
tree9032037c99b4f9cc6dfe07c69dc34a7a25c597cb /internal/client
parentc5dba4360acff23a89f301235401ddfe19ab99a8 (diff)
feat: communication using custom packet protocol
Diffstat (limited to 'internal/client')
-rw-r--r--internal/client/client.go32
1 files changed, 25 insertions, 7 deletions
diff --git a/internal/client/client.go b/internal/client/client.go
index 9aee12e..80b29a0 100644
--- a/internal/client/client.go
+++ b/internal/client/client.go
@@ -2,6 +2,7 @@ package client
import (
"bufio"
+ "context"
"crypto/tls"
"crypto/x509"
_ "embed"
@@ -10,6 +11,8 @@ import (
"os"
"strings"
"time"
+
+ "github.com/kyren223/eko/internal/packet"
)
//go:embed server.crt
@@ -22,7 +25,7 @@ func Run() {
}
tlsConfig := &tls.Config{
- RootCAs: certPool,
+ RootCAs: certPool,
ServerName: "localhost",
}
@@ -48,20 +51,35 @@ func processRequest(request string, tlsConfig *tls.Config) error {
}
defer conn.Close()
- conn.SetDeadline(time.Now().Add(time.Second))
log.Println("established connection with server:", conn.RemoteAddr().String())
- _, err = conn.Write([]byte(request))
+ requestMsg := packet.EkoMessage{Message: request}
+ encoder, err := packet.NewMsgPackEncoder(&requestMsg)
+ if err != nil {
+ return fmt.Errorf("error encoding request: %v", err)
+ }
+ requestPacket := packet.NewPacket(encoder)
+ err = requestPacket.Into(conn)
if err != nil {
return fmt.Errorf("error sending request: %v", err)
}
+ log.Println("sent request to server")
- buffer := make([]byte, 1024)
- n, err := conn.Read(buffer)
- if err != nil {
+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+ defer cancel()
+ out, outErr := packet.RunFramer(ctx, conn)
+
+ var response packet.EkoMessage
+ select {
+ case responsePacket := <-out:
+ if err := responsePacket.DecodePayload(&response); err != nil {
+ return fmt.Errorf("error decoding response: %v", err)
+ }
+
+ case err := <-outErr:
return fmt.Errorf("error receiving response: %v", err)
}
- log.Println("server response:", string(buffer[:n]))
+ log.Println("server response:", response.Message)
return nil
}