package com.dronecontrol.droneapi.components; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UdpComponent { private static final byte[] KEEP_ALIVE_BYTES = new byte[]{0x01, 0x00, 0x00, 0x00}; private DatagramPacket keepAlivePacket; private DatagramSocket socket; private InetAddress address; private int port; public void connect(InetAddress address, int port) { this.address = address; this.port = port; determineKeepAlivePacket(address, port); try { socket = new DatagramSocket(port); socket.setSoTimeout(3000); } catch (SocketException e) { throw new IllegalStateException(e); } } public void disconnect() { socket.disconnect(); socket = null; } public void reconnect() { disconnect(); connect(address, port); } private void determineKeepAlivePacket(InetAddress address, int port) { keepAlivePacket = new DatagramPacket(KEEP_ALIVE_BYTES, KEEP_ALIVE_BYTES.length, address, port); } public void sendKeepAlivePacket() { send(keepAlivePacket); } public void send(DatagramPacket packet) { try { socket.send(packet); } catch (IOException e) { throw new IllegalStateException(e); } } public void receive(DatagramPacket packet) { try { socket.receive(packet); } catch (IOException e) { throw new IllegalStateException(e); } } }