src.dualinventive.com/go/devsim/cmd/devsimd/server/simulator.go

77 lines
1.9 KiB
Go

package main
import (
"context"
"log"
"src.dualinventive.com/go/devsim"
"src.dualinventive.com/go/devsim/daemon"
"src.dualinventive.com/go/devsim/simulator"
)
type simulatorServer struct {
d *daemon.Daemon
}
func (s *simulatorServer) Create(ctx context.Context,
req *devsim.SimulatorCreateRequest) (*devsim.SimulatorCreateReply, error) {
log.Println("Create simulator", req)
ti, err := s.d.Simulator.Add(req.Uri, req.Version)
if err != nil {
return &devsim.SimulatorCreateReply{}, err
}
return &devsim.SimulatorCreateReply{DeviceUID: ti.DeviceUID()}, err
}
func (s *simulatorServer) Remove(ctx context.Context, req *devsim.SimulatorRequest) (*devsim.Empty, error) {
log.Println("Remove simulator", req)
err := s.d.Simulator.Remove(req.DeviceUID)
return &devsim.Empty{}, err
}
func (s *simulatorServer) Start(ctx context.Context, req *devsim.SimulatorRequest) (*devsim.Empty, error) {
log.Println("Start simulator", req)
err := s.d.Simulator.Start(req.DeviceUID)
return &devsim.Empty{}, err
}
func (s *simulatorServer) Stop(ctx context.Context, req *devsim.SimulatorRequest) (*devsim.Empty, error) {
log.Println("Stop simulator", req)
err := s.d.Simulator.Stop(req.DeviceUID)
return &devsim.Empty{}, err
}
func (s *simulatorServer) Info(req *devsim.SimulatorRequest, sif devsim.SimulatorService_InfoServer) error {
log.Println("Simulator info", req)
var simList []simulator.Simulator
if req.DeviceUID == "" {
simList = s.d.Simulator.List()
} else {
sim, err := s.d.Simulator.Get(req.DeviceUID)
if err != nil {
return err
}
simList = append(simList, sim)
}
for _, sim := range simList {
si := &devsim.SimulatorInfo{
DeviceUID: sim.DeviceUID(),
Version: sim.Version(),
Name: sim.Name(),
Key: sim.Key(),
Author: sim.Author(),
}
err := sif.Send(si)
if err != nil {
log.Println(err)
return err
}
}
return nil
}