Example #1
0
  @Override
  @SuppressWarnings("unchecked")
  public void run() {
    byte[] buffer = new byte[1 << 16];
    DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

    try {
      while (true) {
        transport.receive(packet);

        RawPacket rawPacket =
            RawPacket.tryParse(Arrays.copyOfRange(packet.getData(), 0, packet.getLength()));

        if (rawPacket == null
            || rawPacket.getSourceIp().equals(socket.getIp())
            || handledPackets.contains(rawPacket.hashCode())) {
          continue;
        }

        System.out.println("received " + rawPacket);

        Iterable<PacketListener> listenersCopy;

        synchronized (listeners) {
          listenersCopy = (Iterable<PacketListener>) listeners.clone();
        }

        for (PacketListener listener : listenersCopy) {
          listener.onPacketReceived(rawPacket);
        }

        handledPackets.add(rawPacket.hashCode());
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }