Class Connection

java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
io.netty.channel.SimpleChannelInboundHandler<Packet<?>>
net.minecraft.network.Connection
All Implemented Interfaces:
io.netty.channel.ChannelHandler, io.netty.channel.ChannelInboundHandler
Direct Known Subclasses:
FakePlayer.FakeConnection, RateKickingConnection

public class Connection extends io.netty.channel.SimpleChannelInboundHandler<Packet<?>>
  • Field Details

    • AVERAGE_PACKETS_SMOOTHING

      private static final float AVERAGE_PACKETS_SMOOTHING
      See Also:
    • LOGGER

      private static final org.slf4j.Logger LOGGER
    • ROOT_MARKER

      public static final org.slf4j.Marker ROOT_MARKER
    • PACKET_MARKER

      public static final org.slf4j.Marker PACKET_MARKER
    • PACKET_RECEIVED_MARKER

      public static final org.slf4j.Marker PACKET_RECEIVED_MARKER
    • PACKET_SENT_MARKER

      public static final org.slf4j.Marker PACKET_SENT_MARKER
    • NETWORK_WORKER_GROUP

      public static final Supplier<io.netty.channel.nio.NioEventLoopGroup> NETWORK_WORKER_GROUP
    • NETWORK_EPOLL_WORKER_GROUP

      public static final Supplier<io.netty.channel.epoll.EpollEventLoopGroup> NETWORK_EPOLL_WORKER_GROUP
    • LOCAL_WORKER_GROUP

      public static final Supplier<io.netty.channel.DefaultEventLoopGroup> LOCAL_WORKER_GROUP
    • INITIAL_PROTOCOL

      private static final ProtocolInfo<ServerHandshakePacketListener> INITIAL_PROTOCOL
    • receiving

      private final PacketFlow receiving
    • sendLoginDisconnect

      private volatile boolean sendLoginDisconnect
    • pendingActions

      private final Queue<Consumer<Connection>> pendingActions
    • channel

      private io.netty.channel.Channel channel
      The active channel
    • address

      private SocketAddress address
      The address of the remote party
    • disconnectListener

      @Nullable private volatile PacketListener disconnectListener
    • packetListener

      @Nullable private volatile PacketListener packetListener
      The PacketListener instance responsible for processing received packets
    • disconnectionDetails

      @Nullable private DisconnectionDetails disconnectionDetails
    • encrypted

      private boolean encrypted
    • disconnectionHandled

      private boolean disconnectionHandled
    • receivedPackets

      private int receivedPackets
    • sentPackets

      private int sentPackets
    • averageReceivedPackets

      private float averageReceivedPackets
    • averageSentPackets

      private float averageSentPackets
    • tickCount

      private int tickCount
    • handlingFault

      private boolean handlingFault
    • delayedDisconnect

      @Nullable private volatile DisconnectionDetails delayedDisconnect
    • bandwidthDebugMonitor

      @Nullable BandwidthDebugMonitor bandwidthDebugMonitor
    • inboundProtocol

      @Nullable private ProtocolInfo<?> inboundProtocol
  • Constructor Details

    • Connection

      public Connection(PacketFlow receiving)
  • Method Details

    • channelActive

      public void channelActive(io.netty.channel.ChannelHandlerContext context) throws Exception
      Specified by:
      channelActive in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      channelActive in class io.netty.channel.ChannelInboundHandlerAdapter
      Throws:
      Exception
    • channelInactive

      public void channelInactive(io.netty.channel.ChannelHandlerContext context)
      Specified by:
      channelInactive in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      channelInactive in class io.netty.channel.ChannelInboundHandlerAdapter
    • exceptionCaught

      public void exceptionCaught(io.netty.channel.ChannelHandlerContext context, Throwable exception)
      Specified by:
      exceptionCaught in interface io.netty.channel.ChannelHandler
      Specified by:
      exceptionCaught in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      exceptionCaught in class io.netty.channel.ChannelInboundHandlerAdapter
    • channelRead0

      protected void channelRead0(io.netty.channel.ChannelHandlerContext context, Packet<?> packet)
      Specified by:
      channelRead0 in class io.netty.channel.SimpleChannelInboundHandler<Packet<?>>
    • genericsFtw

      private static <T extends PacketListener> void genericsFtw(Packet<T> packet, PacketListener listener)
    • validateListener

      private void validateListener(ProtocolInfo<?> protocolInfo, PacketListener packetListener)
    • syncAfterConfigurationChange

      private static void syncAfterConfigurationChange(io.netty.channel.ChannelFuture future)
    • setupInboundProtocol

      public <T extends PacketListener> void setupInboundProtocol(ProtocolInfo<T> protocolInfo, T packetInfo)
    • setupOutboundProtocol

      public void setupOutboundProtocol(ProtocolInfo<?> protocolInfo)
    • setListenerForServerboundHandshake

      public void setListenerForServerboundHandshake(PacketListener packetListener)
    • initiateServerboundStatusConnection

      public void initiateServerboundStatusConnection(String hostName, int port, ClientStatusPacketListener packetListener)
    • initiateServerboundPlayConnection

      public void initiateServerboundPlayConnection(String hostName, int port, ClientLoginPacketListener packetListener)
    • initiateServerboundPlayConnection

      public <S extends ServerboundPacketListener, C extends ClientboundPacketListener> void initiateServerboundPlayConnection(String hostName, int port, ProtocolInfo<S> serverboundProtocol, ProtocolInfo<C> clientbountProtocol, C packetListener, boolean isTransfer)
    • initiateServerboundConnection

      private <S extends ServerboundPacketListener, C extends ClientboundPacketListener> void initiateServerboundConnection(String hostName, int port, ProtocolInfo<S> serverboundProtocol, ProtocolInfo<C> clientboundProtocol, C packetListener, ClientIntent intention)
    • send

      public void send(Packet<?> packet)
    • send

      public void send(Packet<?> packet, @Nullable PacketSendListener sendListener)
    • send

      public void send(Packet<?> packet, @Nullable PacketSendListener listener, boolean flush)
    • runOnceConnected

      public void runOnceConnected(Consumer<Connection> action)
    • sendPacket

      private void sendPacket(Packet<?> packet, @Nullable PacketSendListener sendListener, boolean flush)
    • doSendPacket

      private void doSendPacket(Packet<?> p_packet, @Nullable PacketSendListener sendListener, boolean flush)
    • flushChannel

      public void flushChannel()
    • flush

      private void flush()
    • flushQueue

      private void flushQueue()
    • tick

      public void tick()
    • tickSecond

      protected void tickSecond()
    • getRemoteAddress

      public SocketAddress getRemoteAddress()
    • getLoggableAddress

      public String getLoggableAddress(boolean logIps)
    • disconnect

      public void disconnect(Component message)
      Closes the channel with a given reason. The reason is stored for later and will be used for informational purposes (info log on server, disconnection screen on the client). This method is also called on the client when the server requests disconnection via ClientboundDisconnectPacket. Closing the channel this way does not send any disconnection packets, it simply terminates the underlying netty channel.
    • disconnect

      public void disconnect(DisconnectionDetails disconnectionDetails)
    • isMemoryConnection

      public boolean isMemoryConnection()
    • getReceiving

      public PacketFlow getReceiving()
    • getSending

      public PacketFlow getSending()
    • connectToServer

      public static Connection connectToServer(InetSocketAddress address, boolean useEpollIfAvailable, @Nullable LocalSampleLogger sampleLogger)
    • connect

      public static io.netty.channel.ChannelFuture connect(InetSocketAddress address, boolean useEpollIfAvailable, Connection connection)
    • outboundHandlerName

      private static String outboundHandlerName(boolean clientbound)
    • inboundHandlerName

      private static String inboundHandlerName(boolean serverbound)
    • configurePacketHandler

      public void configurePacketHandler(io.netty.channel.ChannelPipeline pipeline)
    • configureSerialization

      public static void configureSerialization(io.netty.channel.ChannelPipeline pipeline, PacketFlow flow, boolean memoryOnly, @Nullable BandwidthDebugMonitor bandwithDebugMonitor)
    • createFrameEncoder

      private static io.netty.channel.ChannelOutboundHandler createFrameEncoder(boolean memoryOnly)
    • createFrameDecoder

      private static io.netty.channel.ChannelInboundHandler createFrameDecoder(@Nullable BandwidthDebugMonitor bandwithDebugMonitor, boolean memoryOnly)
    • configureInMemoryPipeline

      public static void configureInMemoryPipeline(io.netty.channel.ChannelPipeline pipeline, PacketFlow flow)
    • connectToLocalServer

      public static Connection connectToLocalServer(SocketAddress address)
      Prepares a clientside Connection for a local in-memory connection ("single player"). Establishes a connection to the socket supplied and configures the channel pipeline (only the packet handler is necessary, since this is for an in-memory connection). Returns the newly created instance.
    • setEncryptionKey

      public void setEncryptionKey(Cipher decryptingCipher, Cipher encryptingCipher)
      Enables encryption for this connection using the given decrypting and encrypting ciphers. This adds new handlers to this connection's pipeline which handle the decrypting and encrypting. This happens as part of the normal network handshake.
      See Also:
    • isEncrypted

      public boolean isEncrypted()
    • isConnected

      public boolean isConnected()
    • isConnecting

      public boolean isConnecting()
    • getPacketListener

      @Nullable public PacketListener getPacketListener()
    • getDisconnectionDetails

      @Nullable public DisconnectionDetails getDisconnectionDetails()
    • setReadOnly

      public void setReadOnly()
    • setupCompression

      public void setupCompression(int threshold, boolean validateDecompressed)
      Enables or disables compression for this connection. If threshold is >= 0 then a CompressionDecoder and CompressionEncoder are installed in the pipeline or updated if they already exist. If threshold is invalid input: '<' 0 then any such codec are removed. Compression is enabled as part of the connection handshake when the server sends ClientboundLoginCompressionPacket.
    • handleDisconnection

      public void handleDisconnection()
    • getAverageReceivedPackets

      public float getAverageReceivedPackets()
    • getAverageSentPackets

      public float getAverageSentPackets()
    • setBandwidthLogger

      public void setBandwidthLogger(LocalSampleLogger bandwithLogger)
    • channel

      public io.netty.channel.Channel channel()
    • getDirection

      public PacketFlow getDirection()
    • getInboundProtocol

      public ProtocolInfo<?> getInboundProtocol()