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  }