-
Notifications
You must be signed in to change notification settings - Fork 110
/
server.go
105 lines (95 loc) · 2.43 KB
/
server.go
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package powersensor
import (
"context"
commonpb "go.viam.com/api/common/v1"
pb "go.viam.com/api/component/powersensor/v1"
"go.viam.com/rdk/protoutils"
"go.viam.com/rdk/resource"
)
type serviceServer struct {
pb.UnimplementedPowerSensorServiceServer
coll resource.APIResourceCollection[PowerSensor]
}
// NewRPCServiceServer constructs a PowerSesnsor gRPC service serviceServer.
func NewRPCServiceServer(coll resource.APIResourceCollection[PowerSensor]) interface{} {
return &serviceServer{coll: coll}
}
// GetReadings returns the most recent readings from the given Sensor.
func (s *serviceServer) GetReadings(
ctx context.Context,
req *commonpb.GetReadingsRequest,
) (*commonpb.GetReadingsResponse, error) {
sensorDevice, err := s.coll.Resource(req.Name)
if err != nil {
return nil, err
}
readings, err := sensorDevice.Readings(ctx, req.Extra.AsMap())
if err != nil {
return nil, err
}
m, err := protoutils.ReadingGoToProto(readings)
if err != nil {
return nil, err
}
return &commonpb.GetReadingsResponse{Readings: m}, nil
}
func (s *serviceServer) GetVoltage(
ctx context.Context,
req *pb.GetVoltageRequest,
) (*pb.GetVoltageResponse, error) {
psDevice, err := s.coll.Resource(req.Name)
if err != nil {
return nil, err
}
voltage, isAc, err := psDevice.Voltage(ctx, req.Extra.AsMap())
if err != nil {
return nil, err
}
return &pb.GetVoltageResponse{
Volts: voltage,
IsAc: isAc,
}, nil
}
func (s *serviceServer) GetCurrent(
ctx context.Context,
req *pb.GetCurrentRequest,
) (*pb.GetCurrentResponse, error) {
psDevice, err := s.coll.Resource(req.Name)
if err != nil {
return nil, err
}
current, isAc, err := psDevice.Current(ctx, req.Extra.AsMap())
if err != nil {
return nil, err
}
return &pb.GetCurrentResponse{
Amperes: current,
IsAc: isAc,
}, nil
}
func (s *serviceServer) GetPower(
ctx context.Context,
req *pb.GetPowerRequest,
) (*pb.GetPowerResponse, error) {
psDevice, err := s.coll.Resource(req.Name)
if err != nil {
return nil, err
}
power, err := psDevice.Power(ctx, req.Extra.AsMap())
if err != nil {
return nil, err
}
return &pb.GetPowerResponse{
Watts: power,
}, nil
}
// DoCommand receives arbitrary commands.
func (s *serviceServer) DoCommand(ctx context.Context,
req *commonpb.DoCommandRequest,
) (*commonpb.DoCommandResponse, error) {
psDevice, err := s.coll.Resource(req.GetName())
if err != nil {
return nil, err
}
return protoutils.DoFromResourceServer(ctx, psDevice, req)
}