Package org.omegazero.net.server
Class UDPServer
java.lang.Object
org.omegazero.net.common.SelectorHandler
org.omegazero.net.common.ConnectionSelectorHandler
org.omegazero.net.server.UDPServer
- All Implemented Interfaces:
Runnable,NetworkApplication,NetServer
- Direct Known Subclasses:
DTLSServer,PlainUDPServer
UDP/IP server implementation of a
NetServer based on java.nio channels.-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final Collection<InetAddress>protected final Collection<Integer> -
Constructor Summary
ConstructorsConstructorDescriptionUDPServer(Collection<Integer> ports) UDPServer(Collection<InetAddress> bindAddresses, Collection<Integer> ports, Consumer<Runnable> worker, long idleTimeout, int receiveBufferSize) Constructs a newUDPServerinstance.
To initialize the server,NetworkApplication.init()of this object must be called. -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()Closes this application, closing all bound and connected sockets and stopping the main loop, causing a call toNetworkApplication.start()to return.longprotected abstract ChannelConnectionhandleConnection(SelectionKey serverKey, SocketAddress remote) protected voidhandleConnectionPost(ChannelConnection connection) protected voidCalled when a key was selected in a select call in theSelectorHandler.runSelectorLoop()method.voidinit()Initializes this application.protected voidNotify thisConnectionSelectorHandlerthat aChannelConnectionwas closed locally by a call toSocketConnection.close().voidsetConnectionCallback(Consumer<SocketConnection> handler) Sets the callback for a new incoming request.
The first parameter of this callback is anSocketConnectioninstance representing the new connection from the client.voidsetIdleTimeout(long idleTimeout) voidstart()Runs the main loop of this instance.protected final voidwriteBacklogStarted(ChannelConnection connection) Methods inherited from class org.omegazero.net.common.ConnectionSelectorHandler
handleConnectionClosed, loopIterationMethods inherited from class org.omegazero.net.common.SelectorHandler
closeSelector, initSelector, isRunning, registerChannel, registerChannel, runSelectorLoop, selectorKeys, selectorWakeupMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.omegazero.net.common.NetworkApplication
run
-
Field Details
-
bindAddresses
-
ports
-
worker
-
-
Constructor Details
-
UDPServer
- See Also:
-
UDPServer#UDPServer(String, Collection, Consumer, long, int)
-
UDPServer
public UDPServer(Collection<InetAddress> bindAddresses, Collection<Integer> ports, Consumer<Runnable> worker, long idleTimeout, int receiveBufferSize) Constructs a newUDPServerinstance.
To initialize the server,NetworkApplication.init()of this object must be called. After the call succeeded, the server will listen on the specified local address (bindAddress) on the given ports andNetworkApplication.start()must be called to start processing incoming and outgoing data.- Parameters:
bindAddresses- A collection of local addresses to bind to (seeServerSocketChannel.bind(java.net.SocketAddress, int)). May benullto use an automatically assigned addressports- The list of ports to listen onworker- A callback accepting tasks to run that may require increased processing time. May benullto run everything using a single threadidleTimeout- The time in milliseconds to keep connections that had no traffic. Metadata for UDP connections not closed usingSocketConnection.close()or by this idle timeout will be stored indefinitely, which should be avoidedreceiveBufferSize- The size of the receive buffer. Should be set to the maximum expected packet size
-
-
Method Details
-
handleConnection
protected abstract ChannelConnection handleConnection(SelectionKey serverKey, SocketAddress remote) throws IOException - Throws:
IOException
-
handleConnectionPost
-
writeBacklogStarted
-
init
Description copied from interface:NetworkApplicationInitializes this application.- Specified by:
initin interfaceNetworkApplication- Throws:
IOException- If an IO error occurs during initialization
-
close
Description copied from interface:NetworkApplicationCloses this application, closing all bound and connected sockets and stopping the main loop, causing a call toNetworkApplication.start()to return.- Specified by:
closein interfaceNetworkApplication- Throws:
IOException- If an IO error occurs
-
start
Description copied from interface:NetworkApplicationRuns the main loop of this instance. This loop processes incoming or outgoing connection requests and network traffic.
Under normal circumstances, should never return beforeNetworkApplication.close()is called. Afterclose()is called, this function should return as soon as possible.
If this method is called beforeNetworkApplication.init(), the behavior is undefined.- Specified by:
startin interfaceNetworkApplication- Throws:
IOException- If an IO error occurs during any networking operation
-
setConnectionCallback
Description copied from interface:NetServerSets the callback for a new incoming request.
The first parameter of this callback is anSocketConnectioninstance representing the new connection from the client.- Specified by:
setConnectionCallbackin interfaceNetServer- Parameters:
handler- The connection callback
-
handleSelectedKey
Description copied from class:SelectorHandlerCalled when a key was selected in a select call in theSelectorHandler.runSelectorLoop()method.- Specified by:
handleSelectedKeyin classSelectorHandler- Parameters:
key- The selected key- Throws:
IOException- If an IO error occurs
-
onConnectionClosed
Description copied from class:ConnectionSelectorHandlerNotify thisConnectionSelectorHandlerthat aChannelConnectionwas closed locally by a call toSocketConnection.close().- Overrides:
onConnectionClosedin classConnectionSelectorHandler- Parameters:
conn- The connection that closed
-
getIdleTimeout
public long getIdleTimeout() -
setIdleTimeout
public void setIdleTimeout(long idleTimeout)
-