timesync

package
v0.2.20-beta.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 29, 2022 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Clock

type Clock interface {
	Now() time.Time
}

Clock defines the functionality needed from any clock type.

type LayerConv

type LayerConv struct {
	// contains filtered or unexported fields
}

LayerConv is a converter between time to layer ID struct.

func (LayerConv) LayerToTime

func (lc LayerConv) LayerToTime(id types.LayerID) time.Time

LayerToTime returns the time of the provided layer.

func (LayerConv) TimeToLayer

func (lc LayerConv) TimeToLayer(t time.Time) types.LayerID

TimeToLayer returns the layer of the provided time.

type LayerConverter

type LayerConverter interface {
	TimeToLayer(time.Time) types.LayerID
	LayerToTime(types.LayerID) time.Time
}

LayerConverter provides conversions from time to layer and vice versa.

type LayerTimer

type LayerTimer chan types.LayerID

LayerTimer is a channel of LayerIDs Subscribers will receive the ticked layer through such channel.

type RealClock

type RealClock struct{}

RealClock is the struct wrapping a local time struct.

func (RealClock) Now

func (RealClock) Now() time.Time

Now returns the current local time.

type Ticker

type Ticker struct {
	LayerConverter // layer conversions provider
	// contains filtered or unexported fields
}

Ticker is the struct responsible for notifying that a layer has been ticked to subscribers.

func NewTicker

func NewTicker(c Clock, lc LayerConverter, opts ...TickerOption) *Ticker

NewTicker returns a new instance of ticker.

func (*Ticker) AwaitLayer

func (t *Ticker) AwaitLayer(layerID types.LayerID) chan struct{}

AwaitLayer returns a channel that will be signaled when layer id layerID was ticked by the clock, or if this layer has passed while sleeping. it does so by closing the returned channel.

func (*Ticker) GetCurrentLayer

func (t *Ticker) GetCurrentLayer() types.LayerID

GetCurrentLayer gets the current layer.

func (*Ticker) Notify

func (t *Ticker) Notify() (int, error)

Notify notifies all the subscribers with the current layer. if the tick time has passed by more than sendTickThreshold, notify is skipped and errMissedTickTime is returned. if some subscribers were not listening, they are skipped and errMissedTicks/number of missed ticks is returned. notify may be skipped also for non-monotonic tick. (the clock can go backward when the system clock gets calibrated).

func (*Ticker) StartNotifying

func (t *Ticker) StartNotifying()

StartNotifying starts the clock notifying.

func (Ticker) Subscribe

func (s Ticker) Subscribe() LayerTimer

Subscribe returns a channel on which the subscriber will be notified when a new layer starts.

func (Ticker) Unsubscribe

func (s Ticker) Unsubscribe(ch LayerTimer)

Unsubscribe removed subscriber channel ch from notification list.

type TickerOption

type TickerOption func(*Ticker)

TickerOption to configure Ticker.

func WithLog

func WithLog(lg log.Log) TickerOption

WithLog configures logger for Ticker.

type TimeClock

type TimeClock struct {
	*Ticker
	// contains filtered or unexported fields
}

TimeClock is the struct holding a real clock.

func NewClock

func NewClock(c Clock, tickInterval time.Duration, genesisTime time.Time, logger log.Log) *TimeClock

NewClock return TimeClock struct that notifies tickInterval has passed.

func (*TimeClock) Close

func (t *TimeClock) Close()

Close closes the clock ticker.

func (*TimeClock) GetGenesisTime

func (t *TimeClock) GetGenesisTime() time.Time

GetGenesisTime returns at which time this clock has started (used to calculate current tick).

func (*TimeClock) GetInterval added in v0.1.6

func (t *TimeClock) GetInterval() time.Duration

GetInterval returns the time interval between clock ticks.

func (TimeClock) Subscribe

func (s TimeClock) Subscribe() LayerTimer

Subscribe returns a channel on which the subscriber will be notified when a new layer starts.

func (TimeClock) Unsubscribe

func (s TimeClock) Unsubscribe(ch LayerTimer)

Unsubscribe removed subscriber channel ch from notification list.

Directories

Path Synopsis
nolint
nolint
mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL