57 lines
1.4 KiB
C#
57 lines
1.4 KiB
C#
// -----------------------------------------------------------------------------
|
|
// file="TimeSourceProvider"
|
|
// Project: StgSharp
|
|
// Copyright (c) Nitload.
|
|
// SPDX-License-Identifier: MIT
|
|
// -----------------------------------------------------------------------------
|
|
|
|
using StgSharp;
|
|
|
|
using System;
|
|
using System.Linq;
|
|
using System.Threading;
|
|
|
|
namespace StgSharp.Timing
|
|
{
|
|
public abstract class TimeSourceProviderBase
|
|
{
|
|
|
|
public abstract long Frequency { get; }
|
|
|
|
protected object SubscribeLock { get; } = new();
|
|
|
|
public void AddSubscriber(
|
|
TimeSpanProvider subscriber
|
|
)
|
|
{
|
|
lock (SubscribeLock) {
|
|
AddSubscriberUnsynced(subscriber);
|
|
}
|
|
}
|
|
|
|
public abstract long GetCurrentTimeSpanTick();
|
|
|
|
public void RemoveSubscriber(
|
|
TimeSpanProvider subscriber
|
|
)
|
|
{
|
|
lock (SubscribeLock) {
|
|
RemoveSubscriberUnsynced(subscriber);
|
|
}
|
|
}
|
|
|
|
public abstract void StartProvidingTime();
|
|
|
|
public abstract void StopProvidingTime();
|
|
|
|
protected abstract void AddSubscriberUnsynced(
|
|
TimeSpanProvider subscriber
|
|
);
|
|
|
|
protected abstract void RemoveSubscriberUnsynced(
|
|
TimeSpanProvider subscriber
|
|
);
|
|
|
|
}
|
|
}
|