async device

This commit is contained in:
ctlove0523 2021-04-13 08:23:09 +08:00
parent 19d8a79cf1
commit f0962d61d0
4 changed files with 67 additions and 27 deletions

View File

@ -1,6 +1,7 @@
package iot package iot
import ( import (
"fmt"
"github.com/golang/glog" "github.com/golang/glog"
uuid "github.com/satori/go.uuid" uuid "github.com/satori/go.uuid"
"time" "time"
@ -16,6 +17,7 @@ type Device interface {
UploadFile(filename string) bool UploadFile(filename string) bool
DownloadFile(filename string) bool DownloadFile(filename string) bool
ReportDeviceInfo(swVersion, fwVersion string) ReportDeviceInfo(swVersion, fwVersion string)
ReportLogs(logs []DeviceLogEntry) bool
} }
type iotDevice struct { type iotDevice struct {
@ -56,6 +58,40 @@ func (device *iotDevice) SetPropertyQueryHandler(handler DevicePropertyQueryHand
device.base.SetPropertyQueryHandler(handler) device.base.SetPropertyQueryHandler(handler)
} }
func (device *iotDevice) ReportLogs(logs []DeviceLogEntry) bool {
var services []ReportDeviceLogServiceEvent
for _, logEntry := range logs {
service := ReportDeviceLogServiceEvent{
BaseServiceEvent: BaseServiceEvent{
ServiceId: "$log",
EventType: "log_report",
EventTime: GetEventTimeStamp(),
},
Paras: logEntry,
}
services = append(services, service)
}
request := ReportDeviceLogRequest{
Services: services,
}
fmt.Println(Interface2JsonString(request))
topic := FormatTopic(DeviceToPlatformTopic, device.base.Id)
token := device.base.Client.Publish(topic, 1, false, Interface2JsonString(request))
if token.Wait() && token.Error() != nil {
glog.Errorf("device %s report log failed", device.base.Id)
return false
} else {
return true
}
}
func (device *iotDevice) SendMessage(message Message) bool { func (device *iotDevice) SendMessage(message Message) bool {
messageData := Interface2JsonString(message) messageData := Interface2JsonString(message)
if token := device.base.Client.Publish(FormatTopic(MessageUpTopic, device.base.Id), device.base.qos, false, messageData); if token := device.base.Client.Publish(FormatTopic(MessageUpTopic, device.base.Id), device.base.qos, false, messageData);

View File

@ -296,6 +296,16 @@ type ReportDeviceInfoEventParas struct {
FwVersion string `json:"fw_version,omitempty"` FwVersion string `json:"fw_version,omitempty"`
} }
// 上报设备日志请求
type ReportDeviceLogRequest struct {
Services []ReportDeviceLogServiceEvent `json:"services,omitempty"`
}
type ReportDeviceLogServiceEvent struct {
BaseServiceEvent
Paras DeviceLogEntry `json:"paras,omitempty"`
}
// 设备状态日志收集器 // 设备状态日志收集器
type DeviceStatusLogCollector func(endTime string) []DeviceLogEntry type DeviceStatusLogCollector func(endTime string) []DeviceLogEntry

View File

@ -10,31 +10,24 @@ import (
func main() { func main() {
device := samples.CreateDevice() device := samples.CreateDevice()
device.AddMessageHandler(func(message iot.Message) bool {
fmt.Println(message)
return true
})
device.SetSubDevicesAddHandler(func(devices iot.SubDeviceInfo) {
fmt.Println(device)
})
device.SetSubDevicesDeleteHandler(func(devices iot.SubDeviceInfo) {
fmt.Println(device)
})
device.SetDeviceStatusLogCollector(func(endTime string) []iot.DeviceLogEntry {
fmt.Println("begin to collect log")
entries := []iot.DeviceLogEntry{}
for i := 0; i < 10; i++ {
entry := iot.DeviceLogEntry{
Type: "DEVICE_MESSAGE",
Timestamp: iot.GetEventTimeStamp(),
Content: "message hello " + strconv.Itoa(i),
}
entries = append(entries, entry)
}
return entries
})
device.Init() device.Init()
var entries []iot.DeviceLogEntry
for i := 0; i < 10; i++ {
entry := iot.DeviceLogEntry{
Type: "DEVICE_MESSAGE",
//Timestamp: iot.GetEventTimeStamp(),
Content: "message hello " + strconv.Itoa(i),
}
entries = append(entries, entry)
}
for i := 0; i < 100; i++ {
result := device.ReportLogs(entries)
fmt.Println(result)
time.Sleep(2 * time.Second)
}
time.Sleep(1 * time.Minute) time.Sleep(1 * time.Minute)
} }

View File

@ -32,8 +32,9 @@ func main() {
Content: "Hello Huawei IoT Platform", Content: "Hello Huawei IoT Platform",
} }
sendMsgResult:=device.SendMessage(message) for i := 0; i < 100; i++ {
sendMsgResult := device.SendMessage(message)
fmt.Printf("send message %v",sendMsgResult) fmt.Printf("send message %v", sendMsgResult)
}
} }