YYC
2023-09-07 7243e0b4bd9a267a633d2e481e17646509b6868d
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
package com.ld.igds.protocol.zldz.server;
 
import com.ld.igds.common.CoreSerService;
import com.ld.igds.models.DeviceSer;
import com.ld.igds.util.SpringUtil;
import com.ld.io.api.HeartbeatProvider;
import com.ld.io.api.IoSession;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
 
 
/**
 * 心跳维持,验证当前连接中的IP在服务器上配置的有没有,如果有则表示正常连接,如果没有则踢除连接。
 * <p>
 * 如果有正常心跳,则发送正常心跳命令,如果没有则发送设备状态查询,
 */
@Slf4j
public class HeartbeatProviderImpl implements HeartbeatProvider {
 
    private CoreSerService serService;
 
    @Override
    public byte[] provide(IoSession session) {
 
        log.debug("========系统开始执行心跳=========={}---{}", session.getCompanyId(), session.getBusinessKey());
 
        if (null == serService) {
            serService = SpringUtil.getBean(CoreSerService.class);
        }
 
        DeviceSer ser = null;
        String companyId = session.getCompanyId();
        if (StringUtils.isNotEmpty(companyId)) {
            ser = serService.getCacheSerByIp(companyId, session.getAddress(), session.getPort());
        }
 
        if (null == ser) {
            log.error("========心跳执行没有获取到分机信息======IP={}-{},取消踢出,只做日志提醒。", session.getAddress(), session.getPort());
            session.destroy();
            return null;
        }
        return null;
    }
 
}