diff --git a/iot_device.go b/iot_device.go index 54a6410..9330ef2 100644 --- a/iot_device.go +++ b/iot_device.go @@ -366,28 +366,28 @@ func (device *iotDevice) createMessageMqttHandler() func(client mqtt.Client, mes func (device *iotDevice) createCommandMqttHandler() func(client mqtt.Client, message mqtt.Message) { commandHandler := func(client mqtt.Client, message mqtt.Message) { - command := &Command{} - if json.Unmarshal(message.Payload(), command) != nil { - glog.Warningf("unmarshal platform command failed,device id = %s,message = %s", device.Id, message) - } - - handleFlag := true - for _, handler := range device.commandHandlers { - handleFlag = handleFlag && handler(*command) - } - var res string - if handleFlag { - glog.Infof("device %s handle command success", device.Id) - res = Interface2JsonString(CommandResponse{ - ResultCode: 0, - }) - } else { - glog.Warningf("device %s handle command failed", device.Id) - res = Interface2JsonString(CommandResponse{ - ResultCode: 1, - }) - } go func() { + command := &Command{} + if json.Unmarshal(message.Payload(), command) != nil { + glog.Warningf("unmarshal platform command failed,device id = %s,message = %s", device.Id, message) + } + + handleFlag := true + for _, handler := range device.commandHandlers { + handleFlag = handleFlag && handler(*command) + } + var res string + if handleFlag { + glog.Infof("device %s handle command success", device.Id) + res = Interface2JsonString(CommandResponse{ + ResultCode: 0, + }) + } else { + glog.Warningf("device %s handle command failed", device.Id) + res = Interface2JsonString(CommandResponse{ + ResultCode: 1, + }) + } if token := device.client.Publish(FormatTopic(CommandResponseTopic, device.Id)+GetTopicRequestId(message.Topic()), 1, false, res); token.Wait() && token.Error() != nil { glog.Infof("device %s send command response failed", device.Id) diff --git a/samples/command/platform_command.go b/samples/command/platform_command.go index e8b2dda..f56d492 100644 --- a/samples/command/platform_command.go +++ b/samples/command/platform_command.go @@ -22,6 +22,7 @@ func main() { // 添加用于处理平台下发命令的callback device.AddCommandHandler(func(command iot.Command) bool { fmt.Println("I get command from platform") + time.Sleep(10 * time.Second) return true }) time.Sleep(10 * time.Minute)