Class NettyNetworkServer

java.lang.Object
eu.cloudnetservice.driver.network.netty.server.NettyNetworkServer
All Implemented Interfaces:
NetworkComponent, NetworkServer, PacketSender, AutoCloseable

@Singleton public class NettyNetworkServer extends Object implements NetworkServer
The default netty based implementation of the network server.
Since:
4.0
  • Field Details

    • WATER_MARK

      protected static final io.netty5.channel.WriteBufferWaterMark WATER_MARK
    • sslContext

      protected final io.netty5.handler.ssl.SslContext sslContext
    • bossEventLoopGroup

      protected final io.netty5.channel.EventLoopGroup bossEventLoopGroup
    • workerEventLoopGroup

      protected final io.netty5.channel.EventLoopGroup workerEventLoopGroup
    • channels

      protected final Collection<NetworkChannel> channels
    • channelFutures

      protected final Map<HostAndPort,io.netty5.util.concurrent.Future<Void>> channelFutures
    • packetRegistry

      protected final PacketListenerRegistry packetRegistry
    • packetDispatcher

      protected final NetworkTaskScheduler packetDispatcher
    • handlerFactory

      protected final Callable<NetworkChannelHandler> handlerFactory
  • Constructor Details

  • Method Details

    • initializeSslContext

      @Nullable private static @Nullable io.netty5.handler.ssl.SslContext initializeSslContext(@Nullable @Nullable SSLConfiguration sslConfig)
      Builds the ssl context for this server if a ssl configuration was supplied and is active.
      Parameters:
      sslConfig - the supplied ssl configuration to build the ssl context based on, can be null.
      Returns:
      the constructed ssl context based on the given configuration.
      Throws:
      IllegalStateException - if an error occurs during construction of the ssl context.
      IllegalArgumentException - if the trust certificate chain or private key file is invalid.
    • sslEnabled

      public boolean sslEnabled()
      Get if this component has ssl enabled.
      Specified by:
      sslEnabled in interface NetworkComponent
      Returns:
      true if this component has ssl enabled, false otherwise.
    • addListener

      @NonNull public @NonNull CompletableFuture<Void> addListener(int port)
      Binds this network server to the given port on any local address (ipv6 form: ::/0) if no other listener is already listening to that port.
      Specified by:
      addListener in interface NetworkServer
      Parameters:
      port - the port to which the listener should get bound.
      Returns:
      a future completed exceptionally if the bind fails, normally if the bind succeeded.
    • addListener

      Binds this network server to the given host and port if no listener is already listening on the given address.
      Specified by:
      addListener in interface NetworkServer
      Parameters:
      hostAndPort - the address to which a listener should get bound.
      Returns:
      a future completed exceptionally if the bind fails, normally if the bind succeeded.
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
    • channels

      Get an immutable collection of all channels which are associated with this component.
      Specified by:
      channels in interface NetworkComponent
      Returns:
      an immutable collection of all channels which are associated with this component.
    • packetDispatcher

      @NonNull public @NonNull Executor packetDispatcher()
      Get the dispatching executor for received packets in any channel which is bound to this network component.
      Specified by:
      packetDispatcher in interface NetworkComponent
      Returns:
      the dispatching executor for received packets.
    • packetRegistry

      @NonNull public @NonNull PacketListenerRegistry packetRegistry()
      Get the packet listener registry which will be the root registry for all channels initialized by this component.
      Specified by:
      packetRegistry in interface NetworkComponent
      Returns:
      the root packet registry for all associated channels.
    • sendPacket

      public void sendPacket(@NonNull @NonNull Packet packet)
      Sends the given packet to the associated target.
      Specified by:
      sendPacket in interface PacketSender
      Parameters:
      packet - the packet to send.
    • sendPacketSync

      public void sendPacketSync(@NonNull @NonNull Packet packet)
      Sends the given packet to the associated target, waiting for the packet write to the channel to complete before resuming the current thread.
      Specified by:
      sendPacketSync in interface PacketSender
      Parameters:
      packet - the packet to send.
    • closeChannels

      public void closeChannels()
      Closes all open connections associated with this network component.
      Specified by:
      closeChannels in interface NetworkComponent