package cn.iocoder.yudao.framework.websocket.core.session;

import org.springframework.web.socket.WebSocketSession;

import java.util.Collection;
import java.util.Set;

/**
 * {@link WebSocketSession} 管理器的接口
 *

 */
public interface WebSocketSessionManager {

    /**
     * 添加 Session
     *
     * @param session Session
     */
    void addSession(WebSocketSession session);

    /**
     * 移除 Session
     *
     * @param session Session
     */
    void removeSession(WebSocketSession session);

    /**
     * 获得指定编号的 Session
     *
     * @param id Session 编号
     * @return Session
     */
    WebSocketSession getSession(String id);

    /**
     * 获得指定用户类型的 Session 列表
     *
     * @param userType 用户类型
     * @return Session 列表
     */
    Collection<WebSocketSession> getSessionList(Integer userType);

    /**
     * 获得指定用户编号的 Session 列表
     *
     * @param userType 用户类型
     * @param userId 用户编号
     * @return Session 列表
     */
    Collection<WebSocketSession> getSessionList(Integer userType, Long userId);


    /**
     * 添加 Session
     *
     * @param session Session
     * @param sn 设备号
     */
    void addSession(WebSocketSession session, String sn);

    /**
     * 获得指定设备编号的 Session
     *
     * @param sn 设备号
     * @return Session session
     */
    WebSocketSession getSessionByDeviceNum(String sn);

    /**
     * 获取设备SN的集合
     * @return
     */
    Collection<WebSocketSession> getSNSession();

    /**
     * 获取所有在线设备的SN
     * @return
     */
    Set<String> getOnlineSN() ;
}