|
@@ -0,0 +1,291 @@
|
|
|
+package SDK
|
|
|
+
|
|
|
+import (
|
|
|
+ "errors"
|
|
|
+ "fmt"
|
|
|
+ "github.com/nats-io/nats.go"
|
|
|
+ "github.com/vmihailenco/msgpack/v5"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+const Success = 200
|
|
|
+const Error = 201
|
|
|
+
|
|
|
+type Client struct {
|
|
|
+ Host string
|
|
|
+ NatsConn *nats.Conn
|
|
|
+}
|
|
|
+
|
|
|
+func NewYunIot(Host string) (*Client, error) {
|
|
|
+ if len(Host) == 0 {
|
|
|
+ Host = "127.0.0.1"
|
|
|
+ }
|
|
|
+ Client_ := &Client{Host: Host}
|
|
|
+ var err error
|
|
|
+ // 连接Nats服务器
|
|
|
+ Client_.NatsConn, err = nats.Connect("nats://"+Host+":6503", nats.MaxReconnects(10), nats.ReconnectWait(10*time.Second),
|
|
|
+ nats.DisconnectErrHandler(func(nc *nats.Conn, err error) {
|
|
|
+ // handle disconnect error event
|
|
|
+ fmt.Println("natsS.DisconnectErrHandler 断开 ", err)
|
|
|
+ }),
|
|
|
+ nats.ReconnectHandler(func(nc *nats.Conn) {
|
|
|
+ // handle reconnect event
|
|
|
+ fmt.Println("natsS.ReconnectHandler, 已经重新连接 ")
|
|
|
+ }))
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("YunIot 连接失败!")
|
|
|
+ return Client_, err
|
|
|
+ }
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("YunIot 连接失败!")
|
|
|
+ return Client_, err
|
|
|
+ }
|
|
|
+ fmt.Println("YunIot OK!")
|
|
|
+
|
|
|
+ return Client_, err
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Client) GetNameByGet(name string) (data interface{}, err error) {
|
|
|
+ return "名字是" + name, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Client) GetDevice(T_sn string) (Device, error) {
|
|
|
+
|
|
|
+ Device_r := Device{T_sn: T_sn}
|
|
|
+ b, err := msgpack.Marshal(&Device_r)
|
|
|
+ if err != nil {
|
|
|
+ return Device{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 请求-响应
|
|
|
+ msg, err := c.NatsConn.Request("/Device/Device/Get", b, 3*time.Second)
|
|
|
+ if err != nil {
|
|
|
+ return Device{}, err
|
|
|
+ }
|
|
|
+ JSONR_R := JSONR{}
|
|
|
+ err = msgpack.Unmarshal(msg.Data, &JSONR_R)
|
|
|
+ if err != nil {
|
|
|
+ return Device{}, err
|
|
|
+ }
|
|
|
+ if JSONR_R.Code != 200 {
|
|
|
+ return Device{}, errors.New(JSONR_R.Msg)
|
|
|
+ }
|
|
|
+ b, err = msgpack.Marshal(JSONR_R.Data)
|
|
|
+ if err != nil {
|
|
|
+ return Device{}, err
|
|
|
+ }
|
|
|
+ err = msgpack.Unmarshal(b, &Device_r)
|
|
|
+ if err != nil {
|
|
|
+ return Device{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return Device_r, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Client) GetDeviceList(T_ProductID, T_sn string, T_online, PageIndex, PageSize int) (JSONS_Device, error) {
|
|
|
+
|
|
|
+ Device_r := Device_Form{T_ProductID: T_ProductID, T_sn: T_sn, T_online: T_online, PageIndex: PageIndex, PageSize: PageSize}
|
|
|
+ b, err := msgpack.Marshal(&Device_r)
|
|
|
+ if err != nil {
|
|
|
+ return JSONS_Device{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 请求-响应
|
|
|
+ msg, err := c.NatsConn.Request("/Device/Device/List", b, 3*time.Second)
|
|
|
+ if err != nil {
|
|
|
+ return JSONS_Device{}, err
|
|
|
+ }
|
|
|
+ JSONR_R := JSONS_Device{}
|
|
|
+ err = msgpack.Unmarshal(msg.Data, &JSONR_R)
|
|
|
+ if err != nil {
|
|
|
+ return JSONS_Device{}, err
|
|
|
+ }
|
|
|
+ if JSONR_R.Code != 200 {
|
|
|
+ return JSONS_Device{Code: Error, Msg: JSONR_R.Msg}, errors.New(JSONR_R.Msg)
|
|
|
+ }
|
|
|
+
|
|
|
+ return JSONR_R, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Client) GetDeviceData(T_sn, T_jointTab, T_jsonFind, T_jsonSort string, PageIndex, PageSize int) (JSONS_Data, error) {
|
|
|
+
|
|
|
+ DeviceData_Form_r := DeviceData_Form{T_sn: T_sn, T_jointTab: T_jointTab, T_jsonFind: T_jsonFind, T_jsonSort: T_jsonSort, PageIndex: PageIndex, PageSize: PageSize}
|
|
|
+ b, err := msgpack.Marshal(&DeviceData_Form_r)
|
|
|
+ if err != nil {
|
|
|
+ return JSONS_Data{}, err
|
|
|
+ }
|
|
|
+ if len(DeviceData_Form_r.T_sn) < 1 {
|
|
|
+ return JSONS_Data{Code: Error, Msg: "T_sn !"}, errors.New("T_sn !")
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(DeviceData_Form_r.T_jointTab) < 1 {
|
|
|
+ return JSONS_Data{Code: Error, Msg: "T_jointTab !"}, errors.New("T_jointTab !")
|
|
|
+ }
|
|
|
+ // 请求-响应
|
|
|
+ msg, err := c.NatsConn.Request("/Device/Device/Data", b, 3*time.Second)
|
|
|
+ if err != nil {
|
|
|
+ return JSONS_Data{Code: Error, Msg: "请求异常 !"}, err
|
|
|
+ }
|
|
|
+ JSONR_R := JSONS_Data{}
|
|
|
+ err = msgpack.Unmarshal(msg.Data, &JSONR_R)
|
|
|
+ if err != nil {
|
|
|
+ return JSONS_Data{Code: Error, Msg: "解析异常 !"}, err
|
|
|
+ }
|
|
|
+ if JSONR_R.Code != 200 {
|
|
|
+ return JSONS_Data{Code: Error, Msg: JSONR_R.Msg}, errors.New(JSONR_R.Msg)
|
|
|
+ }
|
|
|
+
|
|
|
+ return JSONR_R, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Client) GetDevicePush(T_sn, T_data string) error {
|
|
|
+
|
|
|
+ Device_r := Device{T_sn: T_sn, T_data: T_data}
|
|
|
+ b, err := msgpack.Marshal(&Device_r)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 请求-响应
|
|
|
+ msg, err := c.NatsConn.Request("/Device/Device/Push", b, 3*time.Second)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ JSONR_R := JSONR{}
|
|
|
+ err = msgpack.Unmarshal(msg.Data, &JSONR_R)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if JSONR_R.Code != 200 {
|
|
|
+ return errors.New(JSONR_R.Msg)
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Client) GetProductType(T_ProductID string) (ProductType, error) {
|
|
|
+
|
|
|
+ ProductType_r := ProductType{T_ProductID: T_ProductID}
|
|
|
+ b, err := msgpack.Marshal(&ProductType_r)
|
|
|
+ if err != nil {
|
|
|
+ return ProductType{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 请求-响应
|
|
|
+ msg, err := c.NatsConn.Request("/Product/ProductType/Get", b, 3*time.Second)
|
|
|
+ if err != nil {
|
|
|
+ return ProductType{}, err
|
|
|
+ }
|
|
|
+ JSONR_R := JSONR{}
|
|
|
+ err = msgpack.Unmarshal(msg.Data, &JSONR_R)
|
|
|
+ if err != nil {
|
|
|
+ return ProductType{}, err
|
|
|
+ }
|
|
|
+ if JSONR_R.Code != 200 {
|
|
|
+ return ProductType{}, errors.New(JSONR_R.Msg)
|
|
|
+ }
|
|
|
+ b, err = msgpack.Marshal(JSONR_R.Data)
|
|
|
+ if err != nil {
|
|
|
+ return ProductType{}, err
|
|
|
+ }
|
|
|
+ err = msgpack.Unmarshal(b, &ProductType_r)
|
|
|
+ if err != nil {
|
|
|
+ return ProductType{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return ProductType_r, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Client) GetProductTypeList(T_uuid, T_name string) ([]ProductType, error) {
|
|
|
+
|
|
|
+ ProductType_r := ProductType{T_uuid: T_uuid, T_name: T_name}
|
|
|
+ b, err := msgpack.Marshal(&ProductType_r)
|
|
|
+ if err != nil {
|
|
|
+ return []ProductType{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 请求-响应
|
|
|
+ msg, err := c.NatsConn.Request("/Product/ProductType/List", b, 3*time.Second)
|
|
|
+ if err != nil {
|
|
|
+ return []ProductType{}, err
|
|
|
+ }
|
|
|
+ JSONR_R := []ProductType{}
|
|
|
+ err = msgpack.Unmarshal(msg.Data, &JSONR_R)
|
|
|
+ if err != nil {
|
|
|
+ return []ProductType{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return JSONR_R, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Client) GetProductProt(Id int) (ProductProt, error) {
|
|
|
+
|
|
|
+ ProductProt_r := ProductProt{Id: Id}
|
|
|
+ b, err := msgpack.Marshal(&ProductProt_r)
|
|
|
+ if err != nil {
|
|
|
+ return ProductProt{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 请求-响应
|
|
|
+ msg, err := c.NatsConn.Request("/Product/ProductProt/Get", b, 3*time.Second)
|
|
|
+ if err != nil {
|
|
|
+ return ProductProt{}, err
|
|
|
+ }
|
|
|
+ JSONR_R := JSONR{}
|
|
|
+ err = msgpack.Unmarshal(msg.Data, &JSONR_R)
|
|
|
+ if err != nil {
|
|
|
+ return ProductProt{}, err
|
|
|
+ }
|
|
|
+ if JSONR_R.Code != 200 {
|
|
|
+ return ProductProt{}, errors.New(JSONR_R.Msg)
|
|
|
+ }
|
|
|
+ b, err = msgpack.Marshal(JSONR_R.Data)
|
|
|
+ if err != nil {
|
|
|
+ return ProductProt{}, err
|
|
|
+ }
|
|
|
+ err = msgpack.Unmarshal(b, &ProductProt_r)
|
|
|
+ if err != nil {
|
|
|
+ return ProductProt{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return ProductProt_r, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Client) GetProductProtList(T_uuid string, T_mode int, T_name string) ([]ProductProt, error) {
|
|
|
+
|
|
|
+ ProductProt_r := ProductProt{T_uuid: T_uuid, T_mode: T_mode, T_name: T_name}
|
|
|
+ b, err := msgpack.Marshal(&ProductProt_r)
|
|
|
+ if err != nil {
|
|
|
+ return []ProductProt{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ // 请求-响应
|
|
|
+ msg, err := c.NatsConn.Request("/Product/ProductProt/List", b, 3*time.Second)
|
|
|
+ if err != nil {
|
|
|
+ return []ProductProt{}, err
|
|
|
+ }
|
|
|
+ JSONR_R := []ProductProt{}
|
|
|
+ err = msgpack.Unmarshal(msg.Data, &JSONR_R)
|
|
|
+ if err != nil {
|
|
|
+ return []ProductProt{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return JSONR_R, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *Client) GetProductModeList() ([]ProductMode, error) {
|
|
|
+
|
|
|
+ // 请求-响应
|
|
|
+ msg, err := c.NatsConn.Request("/Product/ProductModeLists/List", []byte(""), 3*time.Second)
|
|
|
+ if err != nil {
|
|
|
+ return []ProductMode{}, err
|
|
|
+ }
|
|
|
+ JSONR_R := []ProductMode{}
|
|
|
+ err = msgpack.Unmarshal(msg.Data, &JSONR_R)
|
|
|
+ if err != nil {
|
|
|
+ return []ProductMode{}, err
|
|
|
+ }
|
|
|
+
|
|
|
+ return JSONR_R, nil
|
|
|
+}
|