github.com/qiniu/go-sdk/v7@v7.27.0/linking/device.go (about) 1 package linking 2 3 import ( 4 "context" 5 "encoding/base64" 6 "net/url" 7 ) 8 9 type M map[string]interface{} 10 11 type PatchOperation struct { 12 Op string `json:"op"` // 更该或删除某个属性,replace:更改,delete:删除 13 Key string `json:"key"` // 要修改或删除的属性 14 Value interface{} `json:"value"` // 要修改或删除属性的值 15 } 16 17 type Channel struct { 18 Channelid int `json:"channelid"` 19 Comment string `json:"comment"` 20 } 21 22 type Device struct { 23 Device string `json:"device"` 24 LoginAt int64 `json:"loginAt,omitempty"` // 查询条件 online 为 true 时才会出现该字段 25 RemoteIp string `json:"remoteIp,omitempty"` // 查询条件 online 为 true 时才会出现该字段 26 // 0 不录制 27 // -1 永久 28 // -2 继承app配置 29 SegmentExpireDays int `json:"segmentExpireDays,omitempty"` 30 31 // -1 继承app配置 32 // 0 遵循设备端配置 33 // 1 强制持续上传 34 // 2 强制关闭上传 35 UploadMode int `json:"uploadMode,omitempty"` 36 37 State int `json:"state,omitempty"` 38 39 ActivedAt int64 `json:"activedAt,omitempty"` 40 CreatedAt int64 `json:"createdAt,omitempty"` 41 UpdatedAt int64 `json:"updatedAt,omitempty"` 42 43 // 1 免费使用 44 // 0 正常收费 45 LicenseMode int `json:"licenseMode,omitempty"` 46 47 // meta data 48 Meta []byte `json:"meta,omitempty"` 49 50 // device type 0:normal type, 1:gateway 51 Type int `json:"type"` 52 // max channel of gateway [1,64] 53 MaxChannel int `json:"maxChannel,omitempty"` 54 Channels []Channel `json:"channels,omitempty"` 55 } 56 57 // 在指定的应用下添加新的设备 58 func (manager *Manager) AddDevice(appid string, dev *Device) (*Device, error) { 59 var ret Device 60 err := manager.client.CallWithJson(context.Background(), &ret, "POST", manager.url("/apps/%s/devices", appid), nil, dev) 61 if err != nil { 62 return nil, err 63 } 64 return &ret, nil 65 } 66 67 // 查询指定设备的详细信息 68 func (manager *Manager) QueryDevice(appid, device string) (*Device, error) { 69 device = base64.URLEncoding.EncodeToString([]byte(device)) 70 var ret Device 71 err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/apps/%s/devices/%s", appid, device), nil) 72 if err != nil { 73 return nil, err 74 } 75 return &ret, nil 76 } 77 78 // 更新设备配置信息的操作 79 func (manager *Manager) UpdateDevice(appid, device string, ops []PatchOperation) (*Device, error) { 80 device = base64.URLEncoding.EncodeToString([]byte(device)) 81 req := M{"operations": ops} 82 var ret Device 83 err := manager.client.CallWithJson(context.Background(), &ret, "PATCH", manager.url("/apps/%s/devices/%s", appid, device), nil, req) 84 if err != nil { 85 return nil, err 86 } 87 return &ret, nil 88 } 89 90 // 查询指定应用下所有设备的列表 91 func (manager *Manager) ListDevice(appid, prefix, marker string, limit int, online, status bool, deviceType int, batch string) ([]Device, string, error) { 92 ret := struct { 93 Items []Device `json:"items"` 94 Marker string `json:"marker"` 95 }{} 96 97 query := url.Values{} 98 setQuery(query, "online", online) 99 setQuery(query, "status", status) 100 if limit > 0 { 101 setQuery(query, "limit", limit) 102 } 103 if prefix != "" { 104 setQuery(query, "prefix", prefix) 105 } 106 if marker != "" { 107 setQuery(query, "marker", marker) 108 } 109 setQuery(query, "type", deviceType) 110 if batch != "" { 111 setQuery(query, "batch", batch) 112 } 113 err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/apps/%s/devices?%v", appid, query.Encode()), nil) 114 if err != nil { 115 return nil, "", err 116 } 117 return ret.Items, ret.Marker, nil 118 } 119 120 // 删除指定的设备,删除后将不可恢复 121 func (manager *Manager) DeleteDevice(appid, device string) error { 122 device = base64.URLEncoding.EncodeToString([]byte(device)) 123 return manager.client.Call(context.Background(), nil, "DELETE", manager.url("/apps/%s/devices/%s", appid, device), nil) 124 }