blob: 9f7a6873ceb27f43eb83da513711511a2fa451f8 [file] [log] [blame]
Jeffrey Regan6164c9c2014-08-18 15:00:58 -07001package mocks
2
3import (
Alex Fandrianto560fc9a2014-08-18 18:09:55 -07004 "time"
Jeffrey Regan6164c9c2014-08-18 15:00:58 -07005
Jiri Simsa2fe74172014-09-17 20:33:50 -07006 "veyron.io/veyron/veyron2/ipc"
Jeffrey Regan6164c9c2014-08-18 15:00:58 -07007)
8
Alex Fandrianto560fc9a2014-08-18 18:09:55 -07009const (
10 // Sprinkler status constants
11 sprinklerActive = "active"
12 sprinklerIdle = "idle"
13)
Jeffrey Regan6164c9c2014-08-18 15:00:58 -070014
Alex Fandrianto560fc9a2014-08-18 18:09:55 -070015// Sprinkler allows clients to control the virtual sprinkler.
16type sprinkler struct {
17 status string
Jeffrey Regan6164c9c2014-08-18 15:00:58 -070018}
19
Alex Fandrianto560fc9a2014-08-18 18:09:55 -070020// Status retrieves the Sprinkler's status (i.e., active, idle)
21func (s *sprinkler) Status(ipc.ServerContext) (string, error) {
22 return s.status, nil
Jeffrey Regan6164c9c2014-08-18 15:00:58 -070023}
24
Alex Fandrianto560fc9a2014-08-18 18:09:55 -070025// Start causes the Sprinkler to emit water for the given duration (in seconds).
26func (s *sprinkler) Start(_ ipc.ServerContext, duration uint16) error {
27 s.status = sprinklerActive
28 time.AfterFunc(
29 time.Duration(duration)*time.Second,
30 func() { s.status = sprinklerIdle },
31 )
32 return nil
Jeffrey Regan6164c9c2014-08-18 15:00:58 -070033}
34
Alex Fandrianto560fc9a2014-08-18 18:09:55 -070035// Stop causes the Sprinkler to cease watering.
36func (s *sprinkler) Stop(ipc.ServerContext) error {
37 s.status = sprinklerIdle
38 return nil
39}
40
41// NewSprinkler creates a new sprinkler stub.
42func NewSprinkler() *sprinkler {
43 return &sprinkler{
44 status: sprinklerIdle,
45 }
Jeffrey Regan6164c9c2014-08-18 15:00:58 -070046}