Jeffrey Regan | 6164c9c | 2014-08-18 15:00:58 -0700 | [diff] [blame] | 1 | package mocks |
| 2 | |
| 3 | import ( |
Alex Fandrianto | 560fc9a | 2014-08-18 18:09:55 -0700 | [diff] [blame] | 4 | "time" |
Jeffrey Regan | 6164c9c | 2014-08-18 15:00:58 -0700 | [diff] [blame] | 5 | |
Jiri Simsa | 2fe7417 | 2014-09-17 20:33:50 -0700 | [diff] [blame] | 6 | "veyron.io/veyron/veyron2/ipc" |
Jeffrey Regan | 6164c9c | 2014-08-18 15:00:58 -0700 | [diff] [blame] | 7 | ) |
| 8 | |
Alex Fandrianto | 560fc9a | 2014-08-18 18:09:55 -0700 | [diff] [blame] | 9 | const ( |
| 10 | // Sprinkler status constants |
| 11 | sprinklerActive = "active" |
| 12 | sprinklerIdle = "idle" |
| 13 | ) |
Jeffrey Regan | 6164c9c | 2014-08-18 15:00:58 -0700 | [diff] [blame] | 14 | |
Alex Fandrianto | 560fc9a | 2014-08-18 18:09:55 -0700 | [diff] [blame] | 15 | // Sprinkler allows clients to control the virtual sprinkler. |
| 16 | type sprinkler struct { |
| 17 | status string |
Jeffrey Regan | 6164c9c | 2014-08-18 15:00:58 -0700 | [diff] [blame] | 18 | } |
| 19 | |
Alex Fandrianto | 560fc9a | 2014-08-18 18:09:55 -0700 | [diff] [blame] | 20 | // Status retrieves the Sprinkler's status (i.e., active, idle) |
| 21 | func (s *sprinkler) Status(ipc.ServerContext) (string, error) { |
| 22 | return s.status, nil |
Jeffrey Regan | 6164c9c | 2014-08-18 15:00:58 -0700 | [diff] [blame] | 23 | } |
| 24 | |
Alex Fandrianto | 560fc9a | 2014-08-18 18:09:55 -0700 | [diff] [blame] | 25 | // Start causes the Sprinkler to emit water for the given duration (in seconds). |
| 26 | func (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 Regan | 6164c9c | 2014-08-18 15:00:58 -0700 | [diff] [blame] | 33 | } |
| 34 | |
Alex Fandrianto | 560fc9a | 2014-08-18 18:09:55 -0700 | [diff] [blame] | 35 | // Stop causes the Sprinkler to cease watering. |
| 36 | func (s *sprinkler) Stop(ipc.ServerContext) error { |
| 37 | s.status = sprinklerIdle |
| 38 | return nil |
| 39 | } |
| 40 | |
| 41 | // NewSprinkler creates a new sprinkler stub. |
| 42 | func NewSprinkler() *sprinkler { |
| 43 | return &sprinkler{ |
| 44 | status: sprinklerIdle, |
| 45 | } |
Jeffrey Regan | 6164c9c | 2014-08-18 15:00:58 -0700 | [diff] [blame] | 46 | } |