|
@@ -43,8 +43,8 @@ func (s *Device) Process() {
|
|
|
// 将tcp连接读取到的数据读取到byte数组中, 返回读取到的byte的数目
|
|
|
n, err := s.conn.Read(buf)
|
|
|
if err != nil {
|
|
|
- // 从客户端读取数据的过程中发生错误
|
|
|
- logger.Logger.Errorf("read from client failed, err:%v", err)
|
|
|
+ // 从客户端读取数据的过程中发生错误 这里如果没读到可以视为设备离线了
|
|
|
+ logger.Logger.Errorf("read from client failed [离线了], err:%v", err)
|
|
|
break
|
|
|
}
|
|
|
data := hex.EncodeToString(buf[:n])
|
|
@@ -59,7 +59,7 @@ func (s *Device) Process() {
|
|
|
// 通过sn 查设备是否存在 不存在return 存在就保存con 和 info
|
|
|
screens, err := deviceDao.QueryScreenBySn(data[34:50])
|
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
- logger.Logger.Errorf("Process SN not found \n")
|
|
|
+ logger.Logger.Errorf("Process[case '61'] SN not found \n")
|
|
|
break
|
|
|
}
|
|
|
s.info = screens
|
|
@@ -67,6 +67,17 @@ func (s *Device) Process() {
|
|
|
s.conn.Write(buffer.Bytes())
|
|
|
case "91":
|
|
|
logger.Logger.Debug("心跳")
|
|
|
+ //判断内存devices中是否存储了设备(连接)信息
|
|
|
+ if _, exists := devices[data[34:50]]; !exists {
|
|
|
+ //不存在
|
|
|
+ screens, err := deviceDao.QueryScreenBySn(data[34:50])
|
|
|
+ if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
+ logger.Logger.Errorf("Process[case '91'] SN not found \n")
|
|
|
+ break
|
|
|
+ }
|
|
|
+ s.info = screens
|
|
|
+ devices[s.info.Sn] = *s
|
|
|
+ }
|
|
|
if data[34:50] != s.info.Sn {
|
|
|
continue
|
|
|
}
|
|
@@ -91,7 +102,7 @@ func (s *Device) Handle() {
|
|
|
DisplayStatus: 1,
|
|
|
SourceStatus: 1,
|
|
|
}
|
|
|
- if time.Now().Add(-2*time.Minute).After(s.lastTime) && !s.lastTime.IsZero() {
|
|
|
+ if time.Now().Add(-2*time.Minute).After(s.lastTime) || s.lastTime.IsZero() {
|
|
|
//离线
|
|
|
state.Status = 0
|
|
|
state.PlayStatus = 0
|
|
@@ -100,20 +111,21 @@ func (s *Device) Handle() {
|
|
|
|
|
|
err := Dev.UpdateScreensStatus(s.info.ScreensCode, state)
|
|
|
if err != nil {
|
|
|
- logger.Logger.Error("UpdateScreensStatus err", zap.Error(err))
|
|
|
+ logger.Logger.Error("[Handle] UpdateScreensStatus err", zap.Error(err))
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
s.conn.Close()
|
|
|
- close(s.stopChan) // 通知协程停止
|
|
|
- return // 结束 Handle 协程
|
|
|
+ close(s.stopChan) // 通知协程停止
|
|
|
+ delete(devices, s.info.Sn) //从内存中移除连接
|
|
|
+ return // 结束 Handle 协程
|
|
|
} else {
|
|
|
logger.Logger.Debugf("%s在线", s.info.ScreensCode)
|
|
|
}
|
|
|
//修改数据库状态
|
|
|
err := Dev.UpdateScreensStatus(s.info.ScreensCode, state)
|
|
|
if err != nil {
|
|
|
- logger.Logger.Error("UpdateScreensStatus err", zap.Error(err))
|
|
|
+ logger.Logger.Error("[Handle] UpdateScreensStatus err", zap.Error(err))
|
|
|
continue
|
|
|
}
|
|
|
break
|
|
@@ -179,7 +191,6 @@ func (s *Device) VoiceBroad(broad string) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// 向外暴露的开关操作
|
|
|
func SwitchScreen(sn string, onOff int) error {
|
|
|
device := devices[sn]
|
|
|
err := device.SwitchScreen(onOff)
|
|
@@ -189,7 +200,6 @@ func SwitchScreen(sn string, onOff int) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// 向外暴露的发送内码文字操作
|
|
|
func SendInternalCode(sn string, content []promodel.InternalCodeContent) error {
|
|
|
device := devices[sn]
|
|
|
err := device.SendInternalCode(content)
|
|
@@ -199,7 +209,6 @@ func SendInternalCode(sn string, content []promodel.InternalCodeContent) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// 向外暴露的远程喊话操作
|
|
|
func VoiceBroad(sn string, broad string) error {
|
|
|
device := devices[sn]
|
|
|
err := device.VoiceBroad(broad)
|