@Override
	public void run() {
		
		HashMap <PocsagMessage, Integer> numTimesProccesed = new HashMap<PocsagMessage, Integer>();
		
		while (running) {
			//try {
				PocsagMessage pocsagMessage = PocsagQueue.pollMessageQueue();
				if (pocsagMessage == null) {
					// Timeout. 
					// Generates a idle message
					// 
					// Esta logica habria que ver si meterla en el MSC o donde, por que hay que saber en que 
					// frecuencias operan nuestros subscribers y generar idles para todas ellas. 
				} else { 
					if (processPocsagMessage(pocsagMessage)) {
						// The message couldnt be proccesed. 
						
						int numRetries = (numTimesProccesed.get(pocsagMessage)==null)?0:numTimesProccesed.get(pocsagMessage);
						if (numRetries<5) {
							// Send it back to queue to try again after waiting 10 seconds
							numTimesProccesed.put(pocsagMessage, ++numRetries);
							try {
								Thread.sleep(10000);
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							LOGGER.fine("Retrying (" + numRetries + ") message: " + pocsagMessage);
							
							PocsagQueue.enqueuePocsagMessage(pocsagMessage);

						} else {
							numTimesProccesed.remove(pocsagMessage);
							LOGGER.fine("Dismissing message after " + numRetries + " tries: " + pocsagMessage);
						}
						
					}
						
				}
//			} catch (InterruptedException e) {
//				shutdown();
//			}

		}

	}