You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
protolab/client/main.go

83 lines
1.7 KiB

5 days ago
package main
import (
"log"
"net"
"time"
pb "gordenko.dev/dima/protolab/gen/service/v1"
"gordenko.dev/dima/protolab/bin"
)
const (
ServerAddr = "localhost:8080"
)
func main() {
conn, err := net.Dial("tcp", ServerAddr)
if err != nil {
log.Fatalf("net.Dial: %v\n", err)
}
defer conn.Close()
log.Println("connected to server")
for {
// PING
pingReq := &pb.RequestWrapper{
Payload: &pb.RequestWrapper_Ping{
Ping: &pb.PingRequest{
Timestamp: time.Now().Unix(),
},
},
}
err = bin.WriteMessage(conn, pingReq)
if err != nil {
log.Fatalf("send ping: %v", err)
} else {
log.Println("ping sent")
}
var pingResp pb.ResponseWrapper
err = bin.ReadMessage(conn, &pingResp)
if err != nil {
log.Fatalf("read ping response: %v", err)
}
if resp := pingResp.GetPingResp(); resp != nil {
log.Printf("pong received, server time: %s\n",
time.Unix(resp.GetServerTimestamp(), 0).Format(time.RFC3339))
}
time.Sleep(3 * time.Second)
// TELEMETRY
telemetryReq := &pb.RequestWrapper{
Payload: &pb.RequestWrapper_SendTelemetry{
SendTelemetry: &pb.TelemetryData{
DeviceId: "device-123",
Timestamp: time.Now().Unix(),
Temperature: 25,
BatteryLevel: 70,
},
},
}
err = bin.WriteMessage(conn, telemetryReq)
if err != nil {
log.Fatalf("send telemetry: %v", err)
} else {
log.Println("telemetry sent")
}
var telemetryResp pb.ResponseWrapper
err = bin.ReadMessage(conn, &telemetryResp)
if err != nil {
log.Fatalf("bin.ReadMessage: %v", err)
}
if resp := telemetryResp.GetTelemetryResp(); resp != nil {
log.Printf("server response on TelemetryData: %s\n", resp.GetResultCode().String())
}
time.Sleep(3 * time.Second)
}
}