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

com.microsoft.azure.servicebus.primitives.TimeoutTracker Maven / Gradle / Ivy

Go to download

Java library for Azure Service Bus. Please note, a newer package com.azure:azure-messaging-servicebus for Azure Service Bus is available as of December 2020. While this package will continue to receive critical bug fixes, we strongly encourage you to upgrade. Read the migration guide at https://aka.ms/azsdk/java/migrate/sb for more details.

There is a newer version: 3.6.7
Show newest version
/*
 * Copyright (c) Microsoft. All rights reserved.
 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
 */
package com.microsoft.azure.servicebus.primitives;

import java.time.*;

public class TimeoutTracker
{
	private final Duration originalTimeout;
	private boolean isTimerStarted;
	private Instant startTime;

	/**
	 * @param timeout original operationTimeout
	 * @param startTrackingTimeout whether/not to start the timeout tracking - right now. if not started now, timer tracking will start upon the first call to {@link TimeoutTracker#elapsed()}/{@link TimeoutTracker#remaining()} 
	 */
	public TimeoutTracker(Duration timeout, boolean startTrackingTimeout)
	{
		if (timeout.compareTo(Duration.ZERO) < 0)
		{
			throw new IllegalArgumentException("timeout should be non-negative");
		}

		this.originalTimeout = timeout;

		if (startTrackingTimeout)
		{
			this.startTime = Instant.now();
		}

		this.isTimerStarted = startTrackingTimeout;
	}

	public static TimeoutTracker create(Duration timeout)
	{
		return new TimeoutTracker(timeout, true);
	}

	public Duration remaining()
	{
		return this.originalTimeout.minus(this.elapsed());
	}

	public Duration elapsed()
	{
		if (!this.isTimerStarted)
		{
			this.startTime = Instant.now();
			this.isTimerStarted = true;
		}

		return Duration.between(this.startTime, Instant.now());
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy