public void run() {
        while (true) {

            // Create a buffer to read datagrams into
            byte[] buffer = new byte[1500];

            // Create a packet to receive data into the buffer
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

            if (active) {
                try {
                    byte[] outgoingPacket = ROPacketAssembler.getXmitBytes(joystickHandler, !enabled);
                    
                    DatagramPacket sendPacket = new DatagramPacket(outgoingPacket, outgoingPacket.length, ipAddr, port);
                    serverSocket.send(sendPacket);

                    try {
                        serverSocket.receive(packet);

                        // Process packet
                        ROPacketParser.parsePacket(buffer, packet.getLength(), dashboardData);
                    } catch (Exception SocketTimeoutException) {
                        // Didn't get a packet back
                    }

                    // Reset the length of the packet
                    packet.setLength(buffer.length);

                    try {
                        Thread.sleep(packetRate);
                    } catch (InterruptedException e) {
                        active = false;
                    }
                } catch (Exception e) {
                    active = false;
                    System.out.println(e.toString());
                }
            } else {
                try {
                    Thread.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }