package fr.umlv.IR2net.td2;

import java.util.concurrent.locks.ReentrantLock;

public class PermissifLock {
	private int version=0;
	private long lastUpdate= System.currentTimeMillis();
	private final ReentrantLock myLock= new ReentrantLock();
	
	public int getVersion() {
		myLock.lock();
		try{
			return version;
		}
		finally{
			myLock.unlock();
		}
	}

	public long getLastUpdate() {
		myLock.lock();
		try{
			return lastUpdate;
		}
		finally{
			myLock.unlock();
		}
	}
	
	public void setVersion(int version) {
		myLock.lock();
		try{
			this.version=version;
		}
		finally{
			myLock.unlock();
		}
	}

	public void setLastUpdate(long lastupdate) {
		myLock.lock();
		try{
			this.lastUpdate=lastupdate;
		}
		finally{
			myLock.unlock();
		}
	}

	public static void main(String[] args) {
		final PermissifLock pl = new PermissifLock();
		
		for (int i = 0; i < 10; i++) {
			final int id=i;
			new Thread(new Runnable(){

				@Override
				public void run() {
					for(;;){
						System.out.println("lecteur "+id+":webcam_"+pl.getVersion()+".jpg " +
								"("+pl.getLastUpdate()+")");
						
					}
				}
				
			}).start();
		}
		
		new Thread(new Runnable(){

			@Override
			public void run() {
				for(;;){
					long cur_time= System.currentTimeMillis();
					if(cur_time > pl.getLastUpdate()+10000){
						pl.setVersion(pl.getVersion()+1);
						pl.setLastUpdate(cur_time);
					}
				}		
			}
			
		}).start();
	}
}