/*
 * 文 件 名:  MessageCache
 * 版    权:  华设设计集团股份有限公司
 * 描    述:  <描述>
 * 修 改 人:  lvwenbin
 * 修改时间:  2025/2/27
 * 跟踪单号:  <跟踪单号>
 * 修改单号:  <修改单号>
 * 修改内容:  <修改内容>
 */
package com.ruoyi.ems.core;

import com.ruoyi.ems.model.MqttCacheMsg;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 消息缓存
 * <功能详细描述>
 *
 * @author lvwenbin
 * @version [版本号, 2025/2/27]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
@Service
public class ObjectCache {
    /**
     * 消息缓存队列
     */
    private final static Map<String, MqttCacheMsg> devResCache = new ConcurrentHashMap<>();

    /**
     * 清理过期的设备响应
     */
    public int cleanDevResCache() {
        int cnt = 0;
        long currentTime = new Date().getTime();
        long threshold = 5 * 60 * 1000; // 分钟

        Iterator<Map.Entry<String, MqttCacheMsg>> iterator = devResCache.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, MqttCacheMsg> entry = iterator.next();
            MqttCacheMsg msg = entry.getValue();
            if ((currentTime - msg.getReceiveTime().getTime()) > threshold) {
                // 删除缓存中的消息
                iterator.remove();
                cnt++;
            }
        }

        return cnt;
    }

    public void setDevResCache(String messageId, MqttCacheMsg mqttMessage) {
        devResCache.put(messageId, mqttMessage);
    }

    public MqttCacheMsg readDevResponse(String messageId) {
        return devResCache.remove(messageId);
    }
}