package fireTester.communicator.client;

import com.dragonsoft.tryapp.common.SubmissionObj;

import fireTester.interfaces.SubmissionTest;
import fireTester.messages.KeepAliveMessage;


/**
 *
 */
public class PendingSubmissionKeepAlive implements Runnable {
	private Client _client;

	/**
	 * Constructor.  Created by the Client.
	 * 
	 * @param client the Client to send keep alive messages for.
	 */
	public PendingSubmissionKeepAlive(Client client) {
		super();
		
		this._client = client;
		
		Thread t = new Thread(this);
		t.start();
	}

	/**
	 * Sends a keep alive message for each test in the queue every 30 seconds
	 */
	public void run() {
		while(true) {
			SubmissionObj[] submissions = null;
			
			synchronized(this._client.currentTests) {
				if(this._client.currentTests.size() > 0) {
					submissions = new SubmissionObj[this._client.currentTests.size()];
					
					for(int i = 0; i < this._client.currentTests.size(); i++) {
						SubmissionObj sub = ((SubmissionTest)this._client.currentTests.get(i)).get_submission();
						submissions[i] = sub;
					}	
				}
			}
			
			if(submissions != null && submissions.length > 0) {
				System.out.println("Sending keepalive for " + submissions.length);
				KeepAliveMessage keepAlive = new KeepAliveMessage(submissions);
				this._client.serverDispatcher.dispatch(keepAlive);
			} else {
				System.out.println("idle");
			}
			
			try {
				Thread.sleep(30000L);
			} catch(InterruptedException e) {
				// ignore
			}
		}
	}

}
