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 }