Added support for remote0
This commit is contained in:
126
pkg/service/grpc.go
Normal file
126
pkg/service/grpc.go
Normal file
@@ -0,0 +1,126 @@
|
||||
package hwsensorsservice
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"io"
|
||||
|
||||
"github.com/golang/protobuf/ptypes/empty"
|
||||
"github.com/shayne/hwinfo-streamdeck/pkg/service/proto"
|
||||
)
|
||||
|
||||
// GRPCClient is an implementation of KV that talks over RPC.
|
||||
type GRPCClient struct {
|
||||
Client proto.HWServiceClient
|
||||
}
|
||||
|
||||
// PollTime rpc call
|
||||
func (c *GRPCClient) PollTime() (uint64, error) {
|
||||
resp, err := c.Client.PollTime(context.Background(), &empty.Empty{})
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return resp.GetPollTime(), nil
|
||||
}
|
||||
|
||||
// Sensors implementation
|
||||
func (c *GRPCClient) Sensors() ([]Sensor, error) {
|
||||
stream, err := c.Client.Sensors(context.Background(), &empty.Empty{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var sensors []Sensor
|
||||
for {
|
||||
s, err := stream.Recv()
|
||||
if errors.Is(err, io.EOF) {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
sensors = append(sensors, &sensor{s})
|
||||
}
|
||||
|
||||
return sensors, nil
|
||||
}
|
||||
|
||||
// ReadingsForSensorID implementation
|
||||
func (c *GRPCClient) ReadingsForSensorID(id string) ([]Reading, error) {
|
||||
stream, err := c.Client.ReadingsForSensorID(context.Background(), &proto.SensorIDRequest{Id: id})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var readings []Reading
|
||||
for {
|
||||
r, err := stream.Recv()
|
||||
if errors.Is(err, io.EOF) {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
readings = append(readings, &reading{r})
|
||||
}
|
||||
|
||||
return readings, nil
|
||||
}
|
||||
|
||||
// GRPCServer is the gRPC server that GRPCClient talks to.
|
||||
type GRPCServer struct {
|
||||
// This is the real implementation
|
||||
Impl HardwareService
|
||||
proto.UnimplementedHWServiceServer
|
||||
}
|
||||
|
||||
// PollTime gRPC wrapper
|
||||
func (s *GRPCServer) PollTime(ctx context.Context, _ *empty.Empty) (*proto.PollTimeReply, error) {
|
||||
v, err := s.Impl.PollTime()
|
||||
return &proto.PollTimeReply{PollTime: v}, err
|
||||
}
|
||||
|
||||
// Sensors gRPC wrapper
|
||||
func (s *GRPCServer) Sensors(_ *empty.Empty, stream proto.HWService_SensorsServer) error {
|
||||
sensors, err := s.Impl.Sensors()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, sensor := range sensors {
|
||||
if err := stream.Send(&proto.Sensor{
|
||||
ID: sensor.ID(),
|
||||
Name: sensor.Name(),
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ReadingsForSensorID gRPC wrapper
|
||||
func (s *GRPCServer) ReadingsForSensorID(req *proto.SensorIDRequest, stream proto.HWService_ReadingsForSensorIDServer) error {
|
||||
readings, err := s.Impl.ReadingsForSensorID(req.GetId())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, reading := range readings {
|
||||
if err := stream.Send(&proto.Reading{
|
||||
ID: reading.ID(),
|
||||
TypeI: reading.TypeI(),
|
||||
Type: reading.Type(),
|
||||
Label: reading.Label(),
|
||||
Unit: reading.Unit(),
|
||||
Value: reading.Value(),
|
||||
ValueMin: reading.ValueMin(),
|
||||
ValueMax: reading.ValueMax(),
|
||||
ValueAvg: reading.ValueAvg(),
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user