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) } }