commit - ea4bde5f1831b651791caeaf373d7f6b0ad7708c
commit + f05dbe30f4e66918657dcbc27477af1c0212b1aa
blob - /dev/null
blob + 147b0817f915ff2871fb23ca627da9371eb95400 (mode 644)
--- /dev/null
+++ cmd/dishy/dishy.go
+package main
+
+import (
+ "flag"
+ "log"
+
+ "olowe.co/dishy"
+)
+
+const usage = "usage: dishy [-a address] command"
+
+var aFlag = flag.String("a", dishy.DefaultDishyAddr, "dishy device IP address")
+
+func main() {
+ log.SetFlags(0)
+ log.SetPrefix("dishy:")
+
+ flag.Parse()
+
+ if len(flag.Args()) != 1 {
+ log.Fatal(usage)
+ }
+ cmd := flag.Args()[0]
+ addr := *aFlag
+ client, err := dishy.Dial(addr)
+ if err != nil {
+ log.Fatalf("dial %s: %v", addr, err)
+ }
+
+ switch cmd {
+ default:
+ log.Fatalf("unknown command %s", cmd)
+ case "reboot":
+ err = client.Reboot()
+ case "stow":
+ err = client.Stow()
+ case "unstow":
+ err = client.Unstow()
+ }
+ if err != nil {
+ log.Fatalf("%s: %v", cmd, err)
+ }
+}
blob - /dev/null
blob + 6893fbe340039216aea4a53d12a7662d90cc73a3 (mode 644)
--- /dev/null
+++ dishy.go
+package dishy
+
+import (
+ "context"
+ "time"
+
+ "google.golang.org/grpc"
+ "olowe.co/dishy/device"
+)
+
+//go:generate ./protoc.sh 127.0.0.1:9200
+
+const (
+ DefaultDishyAddr = "192.168.100.1:9200"
+ DefaultWifiAddr = "192.168.1.1:9000"
+)
+
+// A Client is a high-level client to communicate with dishy over the network.
+// A new Client must be created with Dial.
+type Client struct {
+ // Timeout specifies a time limit for requests made by the
+ // client. A timeout of zero means no timeout.
+ Timeout time.Duration
+ dc device.DeviceClient
+ conn *grpc.ClientConn
+}
+
+// Dial returns a new Client connected to the dishy device at addr.
+// Most callers should specify DefaultDishyAddr.
+func Dial(addr string) (*Client, error) {
+ conn, err := grpc.Dial(addr, grpc.WithInsecure())
+ return &Client{
+ conn: conn,
+ dc: device.NewDeviceClient(conn),
+ }, err
+}
+
+func (c *Client) Unstow() error {
+ req := &device.Request{
+ Request: &device.Request_DishStow{
+ DishStow: &device.DishStowRequest{
+ Unstow: true,
+ },
+ },
+ }
+ _, err := c.do(req)
+ return err
+}
+
+func (c *Client) Stow() error {
+ req := &device.Request{
+ Request: &device.Request_DishStow{
+ DishStow: &device.DishStowRequest{
+ Unstow: false,
+ },
+ },
+ }
+ _, err := c.do(req)
+ return err
+}
+
+func (c *Client) Reboot() error {
+ req := &device.Request{
+ Request: &device.Request_Reboot{
+ Reboot: &device.RebootRequest{},
+ },
+ }
+ _, err := c.do(req)
+ return err
+}
+
+func (c *Client) do(req *device.Request) (*device.Response, error) {
+ ctx := context.Background()
+ if c.Timeout > 0 {
+ ctx, _ = context.WithTimeout(context.Background(), c.Timeout)
+ }
+ return c.dc.Handle(ctx, req)
+}