summaryrefslogtreecommitdiff
path: root/client/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'client/main.go')
-rw-r--r--client/main.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/client/main.go b/client/main.go
new file mode 100644
index 0000000..18796ae
--- /dev/null
+++ b/client/main.go
@@ -0,0 +1,63 @@
+package main
+
+import (
+ "encoding/json"
+ "fmt"
+ "log"
+ "net"
+ "sync"
+)
+
+func main() {
+ var wg sync.WaitGroup
+ conn, err := net.Dial("tcp", "localhost:8080")
+ handleError(err)
+ defer conn.Close()
+ wg.Add(1)
+ go func(conn net.Conn) {
+ buf := make([]byte, 4096)
+
+ authMsg, _ := json.Marshal(Message{
+ Type: AUTHENTICATE,
+ Data: "auth",
+ User: "andrew",
+ })
+ _ = sendMessage(conn, authMsg)
+
+ for i := 0; i < 20; i += 1 {
+ fmt.Printf("Sending %d request\n", i)
+ request, _ := json.Marshal(Message{
+ Type: MESSAGE,
+ Data: fmt.Sprintf("Hello, %d", i),
+ User: "andrew",
+ })
+ err = sendMessage(conn, request)
+ if err != nil {
+ break
+ }
+
+ fmt.Println("Waiting for response")
+ _, _ = conn.Read(buf)
+
+ size := fromBytes(buf[:4])
+ response := parseResponse(buf[4 : size+4])
+ fmt.Printf("Response: %s\n", response.Data)
+ }
+
+ exitMsg, _ := json.Marshal(Message{
+ Type: MESSAGE,
+ Data: "exit",
+ User: "andrew",
+ })
+ _ = sendMessage(conn, exitMsg)
+ wg.Done()
+ }(conn)
+
+ wg.Wait()
+}
+
+func handleError(err error) {
+ if err != nil {
+ log.Fatal(err)
+ }
+}