PacketProcessor.java
net.minecraft.network.PacketProcessor
信息
- 全限定名:net.minecraft.network.PacketProcessor
- 类型:public class
- 包:net.minecraft.network
- 源码路径:src/main/java/net/minecraft/network/PacketProcessor.java
- 起始行号:L12
- 实现:AutoCloseable
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L13 - 说明:
TODO
- 类型:
-
packetsToBeHandled- 类型:
Queue<PacketProcessor.ListenerAndPacket<?>> - 修饰符:
private final - 源码定位:
L14 - 说明:
TODO
- 类型:
-
runningThread- 类型:
Thread - 修饰符:
private final - 源码定位:
L15 - 说明:
TODO
- 类型:
-
closed- 类型:
boolean - 修饰符:
private - 源码定位:
L16 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.network.PacketProcessor.ListenerAndPacket- 类型:
record - 修饰符:
private - 源码定位:
L47 - 说明:
TODO
- 类型:
构造器
public PacketProcessor(Thread runningThread) @ L18
- 构造器名:PacketProcessor
- 源码定位:L18
- 修饰符:public
参数:
- runningThread: Thread
说明:
TODO
方法
下面的方法块按源码顺序生成。
public boolean isSameThread() @ L22
- 方法名:isSameThread
- 源码定位:L22
- 返回类型:boolean
- 修饰符:public
参数:
- 无
说明:
TODO
public <T extends PacketListener> void scheduleIfPossible(T listener, Packet<T> packet) @ L26
- 方法名:scheduleIfPossible
- 源码定位:L26
- 返回类型:
void - 修饰符:public
参数:
- listener: T
- packet: Packet
说明:
TODO
public void processQueuedPackets() @ L34
- 方法名:processQueuedPackets
- 源码定位:L34
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
public void close() @ L42
- 方法名:close
- 源码定位:L42
- 返回类型:void
- 修饰符:public
参数:
- 无
说明:
TODO
代码
public class PacketProcessor implements AutoCloseable {
private static final Logger LOGGER = LogUtils.getLogger();
private final Queue<PacketProcessor.ListenerAndPacket<?>> packetsToBeHandled = Queues.newConcurrentLinkedQueue();
private final Thread runningThread;
private boolean closed;
public PacketProcessor(Thread runningThread) {
this.runningThread = runningThread;
}
public boolean isSameThread() {
return Thread.currentThread() == this.runningThread;
}
public <T extends PacketListener> void scheduleIfPossible(T listener, Packet<T> packet) {
if (this.closed) {
throw new RejectedExecutionException("Server already shutting down");
} else {
this.packetsToBeHandled.add(new PacketProcessor.ListenerAndPacket<>(listener, packet));
}
}
public void processQueuedPackets() {
if (!this.closed) {
while (!this.packetsToBeHandled.isEmpty()) {
this.packetsToBeHandled.poll().handle();
}
}
}
@Override
public void close() {
this.closed = true;
}
private record ListenerAndPacket<T extends PacketListener>(T listener, Packet<T> packet) {
public void handle() {
if (this.listener.shouldHandleMessage(this.packet)) {
try {
this.packet.handle(this.listener);
} catch (Exception var3) {
if (var3 instanceof ReportedException re && re.getCause() instanceof OutOfMemoryError) {
throw PacketUtils.makeReportedException(var3, this.packet, this.listener);
}
this.listener.onPacketError(this.packet, var3);
}
} else {
PacketProcessor.LOGGER.debug("Ignoring packet due to disconnection: {}", this.packet);
}
}
}
}引用的其他类
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PacketUtils.makeReportedException()
- 引用位置: