[TCP] outline实现机制

89 阅读1分钟

实现原理

一般通过session, 一般是tcp
在tcp创建的时候session也创建,在tcp断开那自然知道离线了

yzh

JTSessionListener 记得他的设备离线会触发session消耗

完成

package org.yzh.web.endpoint;

import io.github.yezhihao.netmc.core.model.Message;
import io.github.yezhihao.netmc.session.Session;
import io.github.yezhihao.netmc.session.SessionListener;
import org.yzh.protocol.basics.JTMessage;
import org.yzh.web.model.entity.DeviceDO;
import org.yzh.web.model.enums.SessionKey;

import java.util.function.BiConsumer;

public class JTSessionListener implements SessionListener {

    /**
     * 下行消息拦截器
     */
    private static final BiConsumer<Session, Message> requestInterceptor = (session, message) -> {
        JTMessage request = (JTMessage) message;
        request.setClientId(session.getClientId());
        request.setSerialNo(session.nextSerialNo());

        if (request.getMessageId() == 0) {
            request.setMessageId(request.reflectMessageId());
        }

        DeviceDO device = SessionKey.getDevice(session);
        if (device != null) {
            int protocolVersion = device.getProtocolVersion();
            if (protocolVersion > 0) {
                request.setVersion(true);
                request.setProtocolVersion(protocolVersion);
            }
        }
    };

    /**
     * 设备连接
     */
    @Override
    public void sessionCreated(Session session) {
        session.requestInterceptor(requestInterceptor);
    }

    /**
     * 设备注册
     */
    @Override
    public void sessionRegistered(Session session) {
        System.out.println("设备注册:" + session.getClientId());
    }

    /**
     * 设备离线
     */
    @Override
    public void sessionDestroyed(Session session) {
        System.out.println("设备离线:" + session.getClientId());
    }
}