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 = client.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: client.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 }