saas-smartAi通信协议标准库
gongshangguo
2022-03-02 6bc60b02e382cb4a2a3d0a57266d7e3835afe747
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
package server
 
import (
    "basic.com/valib/go-aiot.git/aiotProto/aiot"
    "basic.com/valib/go-aiot.git/client"
    "errors"
    "go.uber.org/zap"
)
 
// 实现client
type Clients struct {
}
 
// 实现OnHeartBeat
func (c *Clients) OnHeartBeat(cli *client.Client, msg *aiot.Protocol) error {
    // 设备未注册不回心跳
    if !Srv.IsMasterOnline(msg.SenderId) {
        // 错误信息
        errMsg := "Cluster have not registered"
        // 记录日志
        cli.Logger.Error(errMsg, zap.Any("msg", msg))
        cli.Close()
        // 移除集群
        Srv.RemoveCluster(msg.SenderId)
        return errors.New(errMsg)
    }
    // 回复心跳
    msg.SenderId = Srv.serverId
    msg.Receiver = aiot.RECEIVER_TO_MASTER
    msg.ReqType = aiot.REQ_TYPE_RESPONSE
    msg.MsgProto = cli.GetMsgProto(msg.MsgProto.MsgId)
    _ = cli.WriteBody(msg)
    // 上报到服务端
    go Srv.serverCallBack.OnHeartBeat(cli, msg)
    return nil
}
 
// 实现OnRegister
func (c *Clients) OnRegister(cli *client.Client, msg *aiot.Protocol) error {
    Srv.RegisterDevice(cli, msg)
    go Srv.serverCallBack.OnRegister(cli, msg)
    msgFeedBack := &aiot.Protocol{
        Receiver: aiot.RECEIVER_TO_MASTER,
        SenderId: Srv.serverId,
        DeviceProto: msg.DeviceProto,
        MsgType: aiot.MSG_TYPE_REGISTER,
        ReqType: aiot.REQ_TYPE_RESPONSE,
        MsgProto: cli.GetMsgProto(msg.MsgProto.MsgId),
        Data: msg.Data,
    }
    _ = cli.WriteBody(msgFeedBack)
    return nil
}
 
// 实现OnRequest
func (c *Clients) OnRequest(cli *client.Client, msg *aiot.Protocol) error {
    go Srv.serverCallBack.OnRequest(cli, msg)
    return nil
}
 
// 实现OnResponse
func (c *Clients) OnResponse(cli *client.Client, msg *aiot.Protocol) error {
    go Srv.serverCallBack.OnResponse(cli, msg)
    return nil
}
 
// 实现OnDataReport
func (c *Clients) OnDataReport(cli *client.Client, msg *aiot.Protocol) error {
    go Srv.serverCallBack.OnDataReport(cli, msg)
    return nil
}
 
// 实现OnDeviceControl
func (c *Clients) OnDeviceControl(cli *client.Client, msg *aiot.Protocol) error {
    go Srv.serverCallBack.OnDeviceControl(cli, msg)
    return nil
}
 
// 实现OnClose
func (c *Clients) OnClose(cli *client.Client) {
    if Srv.IsMasterOnline(cli.GetDeviceId()) {
        Srv.RemoveCluster(cli.GetDeviceId())
    }
    go Srv.serverCallBack.OnClose(cli)
    return
}