/
client.go
38 lines (31 loc) · 959 Bytes
/
client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package keyhole
import (
"net/rpc"
)
// NewClient returns a client ready to go.
func NewClient(conn string) (*Client, error) {
return &Client{conn}, nil
}
// InterfaceInfo returns information for a given interface.
func (c *Client) InterfaceInfo(device string) (InterfaceInfo, error) {
cl, err := c.connect()
if err != nil {
return InterfaceInfo{}, err
}
var reply InterfaceInfo
return reply, cl.Call("Keyhole.DeviceInfo", device, &reply)
}
// ConfigureDevice unsurprisingly configures a device. The
// configuration supplied should be complete for the desired state,
// and computations will be done on the server to achieve this state.
func (c *Client) ConfigureDevice(dc InterfaceConfig) (string, error) {
cl, err := c.connect()
if err != nil {
return "", err
}
var reply string
return reply, cl.Call("Keyhole.ConfigureDevice", dc, &reply)
}
func (c *Client) connect() (*rpc.Client, error) {
return rpc.DialHTTP("tcp", c.server)
}