Last active
December 30, 2015 06:39
-
-
Save HenokT/7790661 to your computer and use it in GitHub Desktop.
A Generic UDP Listener that can be configured to listen to UDP messages on any port and pass the messages to a MessageHandler<T> instance for processing .The default packet bufferSize can be overridden by using the constructor that takes a bufferSize argument.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.yourcompany.util; | |
import java.net.DatagramPacket; | |
import java.net.DatagramSocket; | |
import java.util.concurrent.Executor; | |
public class GenericUdpListener implements Runnable | |
{ | |
private static final int ZERO = 0; | |
private int port; | |
private int bufferSize = 65536; // default buffer size = 2^16 | |
private Executor executor; | |
private MessageHandler<byte[]> messageHandler; | |
public GenericUdpListener(int port, Executor executor, MessageHandler<byte[]> messageHandler) | |
{ | |
this.port = port; | |
this.executor = executor; | |
this.messageHandler = messageHandler; | |
} | |
protected GenericUdpListener(int port, int bufferSize, Executor executor, | |
MessageHandler<byte[]> messageHandler) | |
{ | |
this(port, executor, messageHandler); | |
this.bufferSize = bufferSize; | |
} | |
@Override | |
public void run() | |
{ | |
DatagramSocket socket = null; | |
try | |
{ | |
socket = new DatagramSocket(port); | |
byte[] buffer = new byte[bufferSize]; | |
DatagramPacket packet = new DatagramPacket(buffer, buffer.length); | |
LogUtil.LOG.info(String.format("Listening on Port: %s", port)); | |
while (true) | |
{ | |
socket.receive(packet); | |
final byte[] receivedBytes = new byte[packet.getLength()]; | |
System.arraycopy(packet.getData(), ZERO, receivedBytes, ZERO, receivedBytes.length); | |
executor.execute(new Runnable() | |
{ | |
@Override | |
public void run() | |
{ | |
messageHandler.handleMessage(receivedBytes); | |
} | |
}); | |
} | |
} | |
catch (Exception e) | |
{ | |
LOG.error("", e); | |
} | |
finally | |
{ | |
if (socket != null) | |
{ | |
try | |
{ | |
socket.close(); | |
} | |
catch (Exception e) | |
{ | |
LOG.error("", e); | |
} | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.yourcompany.util; | |
public interface MessageHandler<T> | |
{ | |
void handleMessage(T message); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment