Add support events for HomeKit client

This commit is contained in:
Alexey Khit
2023-09-12 21:03:59 +03:00
parent 9cf75565b5
commit 861632f92b
4 changed files with 61 additions and 69 deletions
+31
View File
@@ -41,6 +41,9 @@ type Client struct {
Conn net.Conn
reader *bufio.Reader
res chan *http.Response
err error
}
func NewClient(rawURL string) (*Client, error) {
@@ -216,6 +219,8 @@ func (c *Client) Dial() (err error) {
// new reader for new conn
c.reader = bufio.NewReaderSize(c.Conn, 32*1024) // 32K like default request body
go c.eventsReader()
return
}
@@ -228,6 +233,32 @@ func (c *Client) Close() error {
return conn.Close()
}
func (c *Client) eventsReader() {
c.res = make(chan *http.Response)
for {
var res *http.Response
if res, c.err = ReadResponse(c.reader, nil); c.err != nil {
break
}
var body []byte
if body, c.err = io.ReadAll(res.Body); c.err != nil {
break
}
res.Body = io.NopCloser(bytes.NewReader(body))
if res.Proto != ProtoEvent {
c.res <- res
} else if c.OnEvent != nil {
c.OnEvent(res)
}
}
close(c.res)
}
func (c *Client) GetAccessories() ([]*Accessory, error) {
res, err := c.Get(PathAccessories)
if err != nil {