@Override
	public final void run() {
		// Define inputDatagramPacket
		DatagramPacket inputDatagramPacket = null;

		// Define input byte buffer
		final byte[] inputBuffer = new byte[Constants.SERVER_BUFFER_INPUT];

		// We inform than server is ready
		running = true;
		fireServerConnect();

		// ArtNet object
		ArtNetObject vArtNetObject = null;

		while (running) {
			inputDatagramPacket = new DatagramPacket(inputBuffer, inputBuffer.length);
			try {
				datagramSocket.receive(inputDatagramPacket);
				vArtNetObject = ArtNetPacketDecoder.decodeArtNetPacket(inputDatagramPacket.getData(), inputDatagramPacket.getAddress());

				// It's realy an artnet packet.
				if (vArtNetObject != null) {
					fireArtNet(vArtNetObject);
					if (vArtNetObject instanceof ArtPoll) {
						// ArtPollPacket
						fireArtPoll((ArtPoll) vArtNetObject);
					} else if (vArtNetObject instanceof ArtTimeCode) {
						// ArtTimeCodePacket
						fireArtTimeCode((ArtTimeCode) vArtNetObject);
					} else if (vArtNetObject instanceof ArtPollReply) {
						// ArtPollReply
						fireArtPollReply((ArtPollReply) vArtNetObject);
					} else if (vArtNetObject instanceof ArtDMX) {
						// ArtDMX
						fireArtDMXReply((ArtDMX) vArtNetObject);
					} else if (vArtNetObject instanceof ArtAddress) {
						// ArtAddress
						fireArtAddressReply((ArtAddress) vArtNetObject);
					}
				}
			} catch (final Exception e) {
				e.getMessage();
				e.printStackTrace();
			}
		}
	}