Handle speaker messages
This commit is contained in:
+29
-2
@@ -17,6 +17,7 @@ type TuyaMqttClient struct {
|
|||||||
client mqtt.Client
|
client mqtt.Client
|
||||||
waiter core.Waiter
|
waiter core.Waiter
|
||||||
wakeupWaiter core.Waiter
|
wakeupWaiter core.Waiter
|
||||||
|
speakerWaiter core.Waiter
|
||||||
publishTopic string
|
publishTopic string
|
||||||
subscribeTopic string
|
subscribeTopic string
|
||||||
auth string
|
auth string
|
||||||
@@ -152,6 +153,7 @@ func (c *TuyaMqttClient) Stop() {
|
|||||||
c.closed = true
|
c.closed = true
|
||||||
c.waiter.Done(errors.New("mqtt: stopped"))
|
c.waiter.Done(errors.New("mqtt: stopped"))
|
||||||
c.wakeupWaiter.Done(errors.New("mqtt: stopped"))
|
c.wakeupWaiter.Done(errors.New("mqtt: stopped"))
|
||||||
|
c.speakerWaiter.Done(errors.New("mqtt: stopped"))
|
||||||
|
|
||||||
if c.client != nil {
|
if c.client != nil {
|
||||||
_ = c.SendDisconnect()
|
_ = c.SendDisconnect()
|
||||||
@@ -240,10 +242,18 @@ func (c *TuyaMqttClient) SendResolution(resolution int) error {
|
|||||||
|
|
||||||
func (c *TuyaMqttClient) SendSpeaker(speaker int) error {
|
func (c *TuyaMqttClient) SendSpeaker(speaker int) error {
|
||||||
// Protocol 312 is used for speaker
|
// Protocol 312 is used for speaker
|
||||||
return c.sendMqttMessage("speaker", 312, "", SpeakerFrame{
|
if err := c.sendMqttMessage("speaker", 312, "", SpeakerFrame{
|
||||||
Mode: "webrtc",
|
Mode: "webrtc",
|
||||||
Value: speaker,
|
Value: speaker,
|
||||||
})
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// if err := c.speakerWaiter.Wait(); err != nil {
|
||||||
|
// return fmt.Errorf("speaker wait failed: %w", err)
|
||||||
|
// }
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *TuyaMqttClient) SendDisconnect() error {
|
func (c *TuyaMqttClient) SendDisconnect() error {
|
||||||
@@ -279,6 +289,8 @@ func (c *TuyaMqttClient) onMessage(client mqtt.Client, msg mqtt.Message) {
|
|||||||
c.onMqttCandidate(&rmqtt)
|
c.onMqttCandidate(&rmqtt)
|
||||||
case "disconnect":
|
case "disconnect":
|
||||||
c.onMqttDisconnect()
|
c.onMqttDisconnect()
|
||||||
|
case "speaker":
|
||||||
|
c.onMqttSpeaker(&rmqtt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,6 +345,21 @@ func (c *TuyaMqttClient) onMqttDisconnect() {
|
|||||||
c.onDisconnect()
|
c.onDisconnect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *TuyaMqttClient) onMqttSpeaker(msg *MqttMessage) {
|
||||||
|
var speakerResponse struct {
|
||||||
|
ResCode int `json:"resCode"`
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := json.Unmarshal(msg.Data.Message, &speakerResponse); err == nil {
|
||||||
|
if speakerResponse.ResCode != 0 {
|
||||||
|
c.speakerWaiter.Done(fmt.Errorf("speaker failed with resCode: %d", speakerResponse.ResCode))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c.speakerWaiter.Done(nil)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *TuyaMqttClient) onAnswer(answer AnswerFrame) {
|
func (c *TuyaMqttClient) onAnswer(answer AnswerFrame) {
|
||||||
if c.handleAnswer != nil {
|
if c.handleAnswer != nil {
|
||||||
c.handleAnswer(answer)
|
c.handleAnswer(answer)
|
||||||
|
|||||||
Reference in New Issue
Block a user