package com.seer.teach.netty.common.dto;


import io.netty.channel.Channel;
import io.netty.util.concurrent.Promise;

import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 表示一个待确认的下行消息项
 */
public final class Pending {
    /**
     * 消息ID
     */
    public final String msgId;
    /**
     * 消息发送的目标通道
     */
    public Channel channel;
    /**
     * 用于通知异步结果的Promise对象，true表示确认成功，false表示失败
     */
    public final Promise<Boolean> promise;
    /**
     * 尝试发送的次数计数器
     */
    public final AtomicInteger attempts = new AtomicInteger(0);
    /**
     * 超时任务句柄，用于取消超时检测
     */
    public volatile ScheduledFuture<?> timeoutTask;

    /**
     * 构造一个新的Pending对象
     *
     * @param msgId   消息ID
     * @param channel 发送消息的通道
     * @param promise 用于通知异步操作结果的Promise
     */
    public Pending(String msgId, Channel channel, Promise<Boolean> promise) {
        this.msgId = msgId;
        this.channel = channel;
        this.promise = promise;
    }
}
