LastSeenMessagesValidator.java
net.minecraft.network.chat.LastSeenMessagesValidator
信息
- 全限定名:net.minecraft.network.chat.LastSeenMessagesValidator
- 类型:public class
- 包:net.minecraft.network.chat
- 源码路径:src/main/java/net/minecraft/network/chat/LastSeenMessagesValidator.java
- 起始行号:L7
- 职责:
TODO
字段/常量
-
lastSeenCount- 类型:
int - 修饰符:
private final - 源码定位:
L8 - 说明:
TODO
- 类型:
-
trackedMessages- 类型:
ObjectList<LastSeenTrackedEntry> - 修饰符:
private final - 源码定位:
L9 - 说明:
TODO
- 类型:
-
lastPendingMessage- 类型:
MessageSignature - 修饰符:
private - 源码定位:
L10 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.network.chat.LastSeenMessagesValidator.ValidationException- 类型:
class - 修饰符:
public static - 源码定位:
L80 - 说明:
TODO
- 类型:
构造器
public LastSeenMessagesValidator(int lastSeenCount) @ L12
- 构造器名:LastSeenMessagesValidator
- 源码定位:L12
- 修饰符:public
参数:
- lastSeenCount: int
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void addPending(MessageSignature message) @ L20
- 方法名:addPending
- 源码定位:L20
- 返回类型:void
- 修饰符:public
参数:
- message: MessageSignature
说明:
TODO
public int trackedMessagesCount() @ L27
- 方法名:trackedMessagesCount
- 源码定位:L27
- 返回类型:int
- 修饰符:public
参数:
- 无
说明:
TODO
public void applyOffset(int offset) @ L31
- 方法名:applyOffset
- 源码定位:L31
- 返回类型:void
- 修饰符:public
参数:
- offset: int
说明:
TODO
public LastSeenMessages applyUpdate(LastSeenMessages.Update update) @ L40
- 方法名:applyUpdate
- 源码定位:L40
- 返回类型:LastSeenMessages
- 修饰符:public
参数:
- update: LastSeenMessages.Update
说明:
TODO
代码
public class LastSeenMessagesValidator {
private final int lastSeenCount;
private final ObjectList<LastSeenTrackedEntry> trackedMessages = new ObjectArrayList<>();
private @Nullable MessageSignature lastPendingMessage;
public LastSeenMessagesValidator(int lastSeenCount) {
this.lastSeenCount = lastSeenCount;
for (int i = 0; i < lastSeenCount; i++) {
this.trackedMessages.add(null);
}
}
public void addPending(MessageSignature message) {
if (!message.equals(this.lastPendingMessage)) {
this.trackedMessages.add(new LastSeenTrackedEntry(message, true));
this.lastPendingMessage = message;
}
}
public int trackedMessagesCount() {
return this.trackedMessages.size();
}
public void applyOffset(int offset) throws LastSeenMessagesValidator.ValidationException {
int maxOffset = this.trackedMessages.size() - this.lastSeenCount;
if (offset >= 0 && offset <= maxOffset) {
this.trackedMessages.removeElements(0, offset);
} else {
throw new LastSeenMessagesValidator.ValidationException("Advanced last seen window by " + offset + " messages, but expected at most " + maxOffset);
}
}
public LastSeenMessages applyUpdate(LastSeenMessages.Update update) throws LastSeenMessagesValidator.ValidationException {
this.applyOffset(update.offset());
ObjectList<MessageSignature> lastSeenEntries = new ObjectArrayList<>(update.acknowledged().cardinality());
if (update.acknowledged().length() > this.lastSeenCount) {
throw new LastSeenMessagesValidator.ValidationException(
"Last seen update contained " + update.acknowledged().length() + " messages, but maximum window size is " + this.lastSeenCount
);
} else {
for (int i = 0; i < this.lastSeenCount; i++) {
boolean acknowledged = update.acknowledged().get(i);
LastSeenTrackedEntry message = this.trackedMessages.get(i);
if (acknowledged) {
if (message == null) {
throw new LastSeenMessagesValidator.ValidationException(
"Last seen update acknowledged unknown or previously ignored message at index " + i
);
}
this.trackedMessages.set(i, message.acknowledge());
lastSeenEntries.add(message.signature());
} else {
if (message != null && !message.pending()) {
throw new LastSeenMessagesValidator.ValidationException(
"Last seen update ignored previously acknowledged message at index " + i + " and signature " + message.signature()
);
}
this.trackedMessages.set(i, null);
}
}
LastSeenMessages lastSeen = new LastSeenMessages(lastSeenEntries);
if (!update.verifyChecksum(lastSeen)) {
throw new LastSeenMessagesValidator.ValidationException("Checksum mismatch on last seen update: the client and server must have desynced");
} else {
return lastSeen;
}
}
}
public static class ValidationException extends Exception {
public ValidationException(String message) {
super(message);
}
}
}引用的其他类
-
- 引用位置:
参数/构造调用/返回值 - 关联成员:
LastSeenMessages()
- 引用位置:
-
- 引用位置:
字段/构造调用 - 关联成员:
LastSeenTrackedEntry()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: