zhangzengfei
2023-11-28 3a706d3378aa3626501370352963883fd2783558
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package service
 
import (
    "encoding/json"
    "strings"
    "vamicro/config"
 
    "basic.com/valib/bhomeclient.git"
    "basic.com/valib/bhomedbapi.git"
    "basic.com/valib/go-aiot.git/aiotProto/aiot"
    "basic.com/valib/logger.git"
    "gitee.com/LearingIt/goTypeTrans/trans"
)
 
const (
    Token = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjQ3NDUwMjU5MjMsInVzZXIiOiJ7XCJpZFwiOlwiZTZjY2QzNmQtNGYxNi00NmZjLTg4ZDUtMDczNjU4NjZkMjA1XCIsXCJwZXJtaXNzaW9uc1wiOltcInByb2R1Y3RNYW5nZTpwdWJsaXNoXCIsXCJjb2RlTWFuZ2U6dmlld1wiLFwiZGV2aWNlTWFuYWdlOmFkZFwiLFwiYWRtaW5NYW5hZ2VcIixcIm9yZGVyTWFuZ2VcIixcImRldmljZU1hbmFnZTp2aWV3XCIsXCJwcm9kdWN0TWFuZ2U6YWRkXCIsXCJhZG1pbk1hbmFnZTp2aWV3XCIsXCJjb2RlTWFuZ2U6YWRkXCIsXCJwcm9kdWN0TWFuZ2U6b2ZmU2FsZVwiLFwib3JkZXJNYW5nZTpjYW5jZWxcIixcInByb2R1Y3RDZW50ZXI6ZG93bmxvYWRcIixcInByb2R1Y3RDZW50ZXI6YnV5XCIsXCJwcm9kdWN0TWFuZ2U6dmlld1wiLFwiYXBpXCIsXCJob21lXCIsXCJvcmRlck1hbmdlOnBheVwiLFwiYWRtaW5NYW5hZ2U6YWRkXCIsXCJvcmRlck1hbmdlOmRvd25sb2FkXCIsXCJwcm9kdWN0Q2VudGVyXCIsXCJkZXZpY2VNYW5hZ2U6dW5iaW5kXCIsXCJvcmRlck1hbmdlOnZpZXdcIixcImFkbWluTWFuYWdlOmVkaXRcIixcImRldmljZU1hbmFnZVwiLFwidmlwTWFuYWdlOmFkZFwiLFwidmlwTWFuYWdlOnZpZXdcIixcInByb2R1Y3RDZW50ZXI6dmlld1wiLFwidmlwTWFuYWdlOmVkaXRcIixcInZpcE1hbmFnZVwiLFwicHJvZHVjdE1hbmdlOmVkaXRcIixcImNvZGVNYW5nZVwiLFwicHJvZHVjdE1hbmdlXCJdLFwidXNlcm5hbWVcIjpcImJhc2ljXCJ9In0.vwjAFkWuEyadRLvIOGK8LFE3MjpY3SQ7j6AlTXnQDG8"
)
 
// string转interface
func stringParams2paramsBody(params map[string]string) map[string]interface{} {
    paramsBody := make(map[string]interface{})
    for k, v := range params {
        paramsBody[k] = v
    }
    return paramsBody
}
 
// interface转string
func interfaceParams2paramsBody(params map[string]interface{}) map[string]string {
    paramsBody := make(map[string]string)
    for k, v := range params {
        paramsBody[k] = trans.Any2String(v)
    }
    return paramsBody
}
 
// 封装统一请求方法
func DoBusReq(topic string, nodeId string, method aiot.RequestMethod, contentType aiot.RequestContentType, params map[string]interface{}) ([]byte, error) {
    var err error
    var data []byte
    logger.Debug("DoBusReq...", topic, nodeId, method, contentType, GetContentTypeString(contentType), params)
    switch method {
    case aiot.RequestMethod_Get:
        // 发送get请求
        return DoGetToBus(nodeId, topic, interfaceParams2paramsBody(params))
    case aiot.RequestMethod_Post:
        // post请求
        return DoPostToBus(nodeId, topic, GetContentTypeString(contentType), params)
    case aiot.RequestMethod_Put:
        // put
        return DoPutToBus(nodeId, topic, GetContentTypeString(contentType), params)
    case aiot.RequestMethod_Delete:
        // delete
        return DoDeleteToBus(nodeId, topic, GetContentTypeString(contentType), params)
    }
    return data, err
}
 
// 获取节点IP
func GetNodeIp(nodeId string) (string, error) {
    client := bhomedbapi.NewClient(bhomedbapi.WithNodes(nil))
    params := map[string]interface{}{
        "node_id": nodeId,
    }
    node, err := client.DoPostRequest("/data/api-v/cluster/findIpByNode", bhomedbapi.CONTENT_TYPE_JSON, params, nil, nil)
    if err != nil {
        logger.Error("Fail to execute GetNodeIp", err)
        return "", err
    }
 
    var ret bhomeclient.Reply
    err = json.Unmarshal(node, &ret)
    if err != nil {
        return "", err
    }
    ip := trans.Any2String(ret.Data)
    if ip != "" && strings.Index(ip, ":") > 0 {
        return ip[0:strings.Index(ip, ":")], nil
    }
    return ip, nil
}
 
// bus-get请求
func DoGetToBus(nodeId string, url string, params map[string]string) ([]byte, error) {
    ip, _ := GetNodeIp(nodeId)
    header := map[string]string{
        "Authorization": Token,
    }
    client := bhomedbapi.NewClient(bhomedbapi.WithIp(ip), bhomedbapi.WithDevId(nodeId), bhomedbapi.WithTopic(url))
    if client == nil || nodeId != config.Server.AnalyServerId {
        logger.Warn("client is nil. return from bus to http")
        client = bhomedbapi.HttpClient{}
        url = "http://" + ip + ":8888/" + strings.Trim(url, "/")
    }
    return client.DoGetRequest(url, params, header)
}
 
// bus-post请求
func DoPostToBus(nodeId string, url string, contentType string, params map[string]interface{}) ([]byte, error) {
    ip, _ := GetNodeIp(nodeId)
    header := map[string]string{
        "Authorization": Token,
    }
    client := bhomedbapi.NewClient(bhomedbapi.WithIp(ip), bhomedbapi.WithDevId(nodeId), bhomedbapi.WithTopic(url))
    if client == nil || nodeId != config.Server.AnalyServerId {
        logger.Warn("client is nil. return from bus to http")
        client = bhomedbapi.HttpClient{}
        url = "http://" + ip + ":8888/" + strings.Trim(url, "/")
    }
    return client.DoPostRequest(url, contentType, params, nil, header)
}
 
// bus-put请求
func DoPutToBus(nodeId string, url string, contentType string, params map[string]interface{}) ([]byte, error) {
    ip, _ := GetNodeIp(nodeId)
    header := map[string]string{
        "Authorization": Token,
    }
    client := bhomedbapi.NewClient(bhomedbapi.WithIp(ip), bhomedbapi.WithDevId(nodeId), bhomedbapi.WithTopic(url))
    if client == nil || nodeId != config.Server.AnalyServerId {
        logger.Warn("client is nil. return from bus to http")
        client = bhomedbapi.HttpClient{}
        url = "http://" + ip + ":8888/" + strings.Trim(url, "/")
    }
    return client.DoPutRequest(url, contentType, params, header)
}
 
// bus-delete请求
func DoDeleteToBus(nodeId string, url string, contentType string, params map[string]interface{}) ([]byte, error) {
    ip, _ := GetNodeIp(nodeId)
    header := map[string]string{
        "Authorization": Token,
    }
    client := bhomedbapi.NewClient(bhomedbapi.WithIp(ip), bhomedbapi.WithDevId(nodeId), bhomedbapi.WithTopic(url))
    if client == nil || nodeId != config.Server.AnalyServerId {
        logger.Warn("client is nil. return from bus to http")
        client = bhomedbapi.HttpClient{}
        url = "http://" + ip + ":8888/" + strings.Trim(url, "/")
    }
    return client.DoDeleteRequest(url, contentType, params, header)
}