package org.framework.lazy.cloud.network.heartbeat.common;

import io.netty.channel.Channel;

import java.util.concurrent.ConcurrentHashMap;

/**
 * 访客通信通道上下文（服务端、客户端 通信）
 */
public class NettyVisitorIdChannelContext {

    protected static final ConcurrentHashMap<String, Channel> VISITOR_ID = new ConcurrentHashMap<>();


    /**
     * 添加访客
     *
     * @param visitorId 访客id
     * @param visitor   访客
     */
    public static void pushVisitor(Channel visitor, String visitorId) {
        VISITOR_ID.put(visitorId, visitor);

    }

    /**
     * 通过访客端口获取访客
     *
     * @param visitorId 访客id
     * @return 访客
     */
    public static Channel getVisitor(String visitorId) {
        return VISITOR_ID.get(visitorId);
    }

    /**
     * 通过访客端口获取访客
     *
     * @param visitorId 访客id
     * @param <T>       访客范型
     * @return 访客
     */
    public static Channel getVisitor(byte[] visitorId) {
        return getVisitor(new String(visitorId));

    }

    /**
     * 移除访客
     *
     * @param visitorId 访客ID
     */
    public static void clear(String visitorId) {
        Channel visitor = getVisitor(visitorId);
        if (visitor != null) {
            VISITOR_ID.remove(visitorId);
            visitor.close();
        }

    }

    /**
     * 移除访客
     *
     * @param visitorId 访客ID
     */
    public static void clear(byte[] visitorId) {
        clear(new String(visitorId));
    }
}
