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
|
}
|