aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bridge.go68
-rw-r--r--light.go19
2 files changed, 40 insertions, 47 deletions
diff --git a/bridge.go b/bridge.go
index 899b188..54000e3 100644
--- a/bridge.go
+++ b/bridge.go
@@ -15,29 +15,6 @@ import (
"io"
)
-// type Bridge struct {
-// IPAddress string
-// Username string
-// Info BridgeInfo
-// }
-//
-// type BridgeInfo struct {
-// Root struct {
-// Device struct {
-// DeviceType string `xml:"deviceType"`
-// FriendlyName string `xml:"friendlyName"`
-// Manufacturer string `xml:"manufacturer"`
-// ManufacturerURL string `xml:"manufacturerURL"`
-// ModelDescription string `xml:"modelDescription"`
-// ModelName string `xml:"modelName"`
-// ModelNumber string `xml:"modelNumber"`
-// ModelURL string `xml:"modelURL"`
-// SerialNumber string `xml:"serialNumber"`
-// UDN string `xml:"UDN"`
-// } `xml:"device"`
-// } `xml:"root"`
-// }
-
type Bridge struct {
IPAddress string
Username string
@@ -63,21 +40,46 @@ type Device struct {
UDN string `xml:"UDN"`
}
-func (self *Bridge) Get(path string) (io.Reader, error) {
+func (self *Bridge) Get(path string) ([]byte, io.Reader, error) {
resp, err := http.Get("http://" + self.IPAddress + path)
- if err != nil {
- trace("", err)
- } else if resp.StatusCode != 200 {
- trace(fmt.Sprintf("Bridge status error: %d", resp.StatusCode), nil)
+ if self.Error(resp, err) {
+ return []byte{}, nil, err
}
- //defer resp.Body.Close()
+ return handleResponse(resp)
+}
+
+func (self *Bridge) Post(path string) ([]byte, io.Reader, error) {
+ // resp, err := http.Post("http://" + self.IpAddress + path)
+ // if err != nil {
+ // trace("", err)
+ // }
+ return []byte{}, nil, nil
+}
+
+// HandleResponse manages the http.Response from a bridge Get/Put/Post/Delete
+// by checking it for errors and invalid return types.
+func handleResponse(resp *http.Response) ([]byte, io.Reader, error) {
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
trace("Error parsing bridge description xml.", nil)
+ return []byte{}, nil, err
}
reader := bytes.NewReader(body)
- // TODO: handle individual error codes
- return reader, nil
+
+ return body, reader, nil
+}
+
+// bridge.Error handles any bridge request or response errors
+func (self *Bridge) Error(resp *http.Response, err error) (bool) {
+ if err != nil {
+ trace("", err)
+ return true
+ } else if resp.StatusCode != 200 {
+ // TODO: handle other status codes
+ trace(fmt.Sprintf("Bridge status error: %d", resp.StatusCode), nil)
+ return true
+ }
+ return false
}
// Error Struct
@@ -158,7 +160,7 @@ func NewBridge(ip string, username string) *Bridge {
// GetBridgeInfo retreives the description.xml file from the bridge.
func GetBridgeInfo(self *Bridge) Error {
- reader, err := self.Get("/description.xml")
+ _, reader, err := self.Get("/description.xml")
if err != nil {
return ErrResponse
}
@@ -169,7 +171,7 @@ func GetBridgeInfo(self *Bridge) Error {
os.Exit(1)
}
self.Info = data
- fmt.Println("Bridge Info:\n", self.Info)
+ //fmt.Println("Bridge Info:\n", self.Info)
return NoErr
}
diff --git a/light.go b/light.go
index 4d21924..ceffeef 100644
--- a/light.go
+++ b/light.go
@@ -76,8 +76,10 @@ func SetLightState(bridge *Bridge, lightID string, newState LightState) error {
return err
}
+ _ = body
+
// TODO: Parse the response and return any error
- fmt.Println(string(body))
+ //fmt.Println("LightState: ", string(body))
return nil
}
@@ -89,20 +91,9 @@ func GetAllLights(bridge *Bridge) ([]Light, error) {
for index := 1; index < 101; index++ {
// Send an http GET and inspect the response
- resp, err := http.Get(
- fmt.Sprintf("http://%s/api/%s/lights/%d", bridge.IPAddress, bridge.Username, index))
+ uri := fmt.Sprintf("/api/%s/lights/%d", bridge.Username, index)
+ body, _, err := bridge.Get(uri)
if err != nil {
- trace("", err)
- return lights, err
- } else if resp.StatusCode != 200 {
- trace(fmt.Sprintf("Bridge status error %d", resp.StatusCode), nil)
- }
-
- // Read and inspect the response content
- body, err := ioutil.ReadAll(resp.Body)
- defer resp.Body.Close()
- if err != nil {
- trace("", err)
return lights, err
}
if strings.Contains(string(body), "not available") {