summaryrefslogtreecommitdiff
path: root/client/main.go
blob: 18796ae79bcf6681a6a30c1bd70087cebbea99ac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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)
	}
}