com.acgist.snail.pojo.session.NodeSession Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of snail Show documentation
Show all versions of snail Show documentation
基于Java开发的下载工具,支持下载协议:BT(BitTorrent、磁力链接、种子文件)、HLS(M3U8)、FTP、HTTP。
package com.acgist.snail.pojo.session;
import java.util.Arrays;
import com.acgist.snail.utils.BeanUtils;
/**
* DHT节点信息
*
* @author acgist
*/
public final class NodeSession implements Comparable {
/**
* DHT节点状态
*
* @author acgist
*/
public enum Status {
/**
* 未知:没有使用
*/
UNUSE,
/**
* 验证:没有收到响应
* 使用后标记为验证状态
* 验证状态节点不能用于:保存、查找
*/
VERIFY,
/**
* 可用:收到响应
*/
AVAILABLE;
}
/**
* 节点ID
*/
private final byte[] id;
/**
* 节点地址
*/
private final String host;
/**
* 节点端口
*/
private final int port;
/**
* 节点状态
*/
private Status status;
/**
* @param id 节点ID
* @param host 节点地址
* @param port 节点端口
*/
private NodeSession(byte[] id, String host, int port) {
this.id = id;
this.host = host;
this.port = port;
this.status = Status.UNUSE;
}
/**
* 新建DHT节点信息
*
* @param id 节点ID
* @param host 节点地址
* @param port 节点端口
*
* @return {@link NodeSession}
*/
public static final NodeSession newInstance(byte[] id, String host, int port) {
return new NodeSession(id, host, port);
}
/**
* 判断节点是否可以使用
*
* @return 是否可以使用
*/
public boolean useable() {
return this.status != Status.VERIFY;
}
/**
* 标记验证状态
*
* @return 标记结果
*/
public boolean markVerify() {
if(this.status == Status.UNUSE) {
this.status = Status.VERIFY;
}
return true;
}
/**
* 获取节点ID
*
* @return 节点ID
*/
public byte[] getId() {
return id;
}
/**
* 获取节点地址
*
* @return 节点地址
*/
public String getHost() {
return host;
}
/**
* 获取节点端口
*
* @return 节点端口
*/
public int getPort() {
return port;
}
/**
* 获取节点状态
*
* @return 节点状态
*/
public Status getStatus() {
return status;
}
/**
* 设置节点状态
*
* @param status 节点状态
*/
public void setStatus(Status status) {
this.status = status;
}
@Override
public int compareTo(NodeSession target) {
return Arrays.compareUnsigned(this.id, target.id);
}
@Override
public int hashCode() {
return Arrays.hashCode(this.id);
}
@Override
public boolean equals(Object object) {
if(this == object) {
return true;
}
if(object instanceof NodeSession session) {
return Arrays.equals(this.id, session.id);
}
return false;
}
@Override
public String toString() {
return BeanUtils.toString(this, this.id, this.host, this.port);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy