All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.zbus.remoting.ticket.TicketManager Maven / Gradle / Ivy

package org.zbus.remoting.ticket;

import java.util.Collection;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import org.zbus.remoting.Message;
 
public class TicketManager { 
	
	private static ConcurrentMap tickets = new ConcurrentHashMap();
	private static ScheduledExecutorService ticketThread = Executors.newSingleThreadScheduledExecutor();
	static void norun() {
		
		ticketThread.scheduleAtFixedRate(
			new Runnable() {
				long currentTime = -1;

				public void run() {
					Collection values = tickets.values();
					currentTime = System.currentTimeMillis();
					for (Ticket t : values) {
						if ((currentTime - t.startTime) > t.timeout) {
							removeTicket(t.getId());
							t.expired();
						}
					}
				}

			}, 500, 500, TimeUnit.MILLISECONDS);
	}
	
	public static void shutdown(){
		ticketThread.shutdown();
	}

 
	public static Ticket getTicket(String id) {
		if(id == null) return null;
		return tickets.get(id);
	}
 
	public static Ticket createTicket(Message req, long timeout) {
		return createTicket(req, timeout, null);
	}
 
	public static Ticket createTicket(Message req, long timeout, ResultCallback callback) {
		Ticket ticket = new Ticket(req, timeout);
		ticket.setCallback(callback);

		if (tickets.putIfAbsent(ticket.getId(), ticket) != null) {
			throw new IllegalArgumentException("duplicate ticket number.");
		}

		return ticket;
	} 
	
	public static void removeTicket(String id) {
		tickets.remove(id);
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy