# Trigger

<a id="trigger-1"></a>

# Trigger

```cpp
#include <icy/sched/trigger.h>

struct Trigger
```

[Defined in src/sched/include/icy/sched/trigger.h:58](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L58)

> **Inherits:** [`ISerializable`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#iserializable)
> **Subclassed by:** [`DailyTrigger`](https://auscaster.com/icey/docs/api-reference/icy-sched-DailyTrigger.md#dailytrigger), [`IntervalTrigger`](https://auscaster.com/icey/docs/api-reference/icy-sched-IntervalTrigger.md#intervaltrigger), [`OnceOnlyTrigger`](https://auscaster.com/icey/docs/api-reference/icy-sched-OnceOnlyTrigger.md#onceonlytrigger)

Base class for scheduled task triggers that determine when a task should run.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`type`](#type-20) | `variable` | Declared here |
| [`name`](#name-14) | `variable` | Declared here |
| [`timesRun`](#timesrun) | `variable` | Declared here |
| [`createdAt`](#createdat) | `variable` | Declared here |
| [`scheduleAt`](#scheduleat) | `variable` | Declared here |
| [`lastRunAt`](#lastrunat) | `variable` | Declared here |
| [`Trigger`](#trigger-2) | `function` | Declared here |
| [`update`](#update-10) | `function` | Declared here |
| [`remaining`](#remaining-2) | `function` | Declared here |
| [`timeout`](#timeout-11) | `function` | Declared here |
| [`expired`](#expired-5) | `function` | Declared here |
| [`serialize`](#serialize-5) | `function` | Declared here |
| [`deserialize`](#deserialize-5) | `function` | Declared here |
| [`~ISerializable`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#iserializable-1) | `function` | Inherited from [`ISerializable`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#iserializable) |
| [`serialize`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#serialize-1) | `function` | Inherited from [`ISerializable`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#iserializable) |
| [`deserialize`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#deserialize-1) | `function` | Inherited from [`ISerializable`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#iserializable) |

## Inherited from [`ISerializable`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#iserializable)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`~ISerializable`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#iserializable-1) `virtual` | Defaulted destructor. |
| `function` | [`serialize`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#serialize-1) `virtual` | Serializes this object's state into `root`. |
| `function` | [`deserialize`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#deserialize-1) `virtual` | Populates this object's state from `root`. |

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| `std::string` | [`type`](#type-20)  | The type of this trigger class. |
| `std::string` | [`name`](#name-14)  | The display name of this trigger class. |
| `int` | [`timesRun`](#timesrun)  | The number of times the task has run since creation; |
| [`DateTime`](https://auscaster.com/icey/docs/api-reference/icy-DateTime.md#datetime) | [`createdAt`](#createdat)  | The time the task was created. |
| [`DateTime`](https://auscaster.com/icey/docs/api-reference/icy-DateTime.md#datetime) | [`scheduleAt`](#scheduleat)  | The time the task is scheduled to run. |
| [`DateTime`](https://auscaster.com/icey/docs/api-reference/icy-DateTime.md#datetime) | [`lastRunAt`](#lastrunat)  | The time the task was last run. |

---

<a id="type-20"></a>

### type

```cpp
std::string type
```

[Defined in src/sched/include/icy/sched/trigger.h:90](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L90)

The type of this trigger class.

---

<a id="name-14"></a>

### name

```cpp
std::string name
```

[Defined in src/sched/include/icy/sched/trigger.h:93](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L93)

The display name of this trigger class.

---

<a id="timesrun"></a>

### timesRun

```cpp
int timesRun
```

[Defined in src/sched/include/icy/sched/trigger.h:97](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L97)

The number of times the task has run since creation;

---

<a id="createdat"></a>

### createdAt

```cpp
DateTime createdAt
```

Type: [`DateTime`](https://auscaster.com/icey/docs/api-reference/icy-DateTime.md#datetime)

[Defined in src/sched/include/icy/sched/trigger.h:100](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L100)

The time the task was created.

---

<a id="scheduleat"></a>

### scheduleAt

```cpp
DateTime scheduleAt
```

Type: [`DateTime`](https://auscaster.com/icey/docs/api-reference/icy-DateTime.md#datetime)

[Defined in src/sched/include/icy/sched/trigger.h:103](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L103)

The time the task is scheduled to run.

---

<a id="lastrunat"></a>

### lastRunAt

```cpp
DateTime lastRunAt
```

Type: [`DateTime`](https://auscaster.com/icey/docs/api-reference/icy-DateTime.md#datetime)

[Defined in src/sched/include/icy/sched/trigger.h:106](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L106)

The time the task was last run.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Trigger`](#trigger-2)  |  |
| `void` | [`update`](#update-10) `virtual` | Updates the scheduleAt value to the next scheduled time. |
| `std::int64_t` | [`remaining`](#remaining-2) `virtual` | Returns the milliseconds remaining until the next scheduled timeout. |
| `bool` | [`timeout`](#timeout-11) `virtual` | Returns true if the task is ready to be run, false otherwise. |
| `bool` | [`expired`](#expired-5) `virtual` | Returns true if the task is expired and should be destroyed. Returns false by default. |
| `void` | [`serialize`](#serialize-5) `virtual` `override` | Serializes timing state (type, name, createdAt, scheduleAt, lastRunAt, timesRun) to `root`. |
| `void` | [`deserialize`](#deserialize-5) `virtual` `override` | Deserializes timing state from `root`. |

---

<a id="trigger-2"></a>

### Trigger

```cpp
Trigger(const std::string & type = "", const std::string & name = "")
```

[Defined in src/sched/include/icy/sched/trigger.h:62](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L62)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `type` | `const std::string &` | Registered type name used by [TaskFactory](https://auscaster.com/icey/docs/api-reference/icy-sched-TaskFactory.md#taskfactory). |
| `name` | `const std::string &` | Human-readable display name. |

---

<a id="update-10"></a>

### update

`virtual`

```cpp
virtual void update()
```

[Defined in src/sched/include/icy/sched/trigger.h:66](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L66)

Updates the scheduleAt value to the next scheduled time.

#### Reimplemented by

- [`OnceOnlyTrigger::update`](https://auscaster.com/icey/docs/api-reference/icy-sched-OnceOnlyTrigger.md#update-8)
- [`IntervalTrigger::update`](https://auscaster.com/icey/docs/api-reference/icy-sched-IntervalTrigger.md#update-7)
- [`DailyTrigger::update`](https://auscaster.com/icey/docs/api-reference/icy-sched-DailyTrigger.md#update-6)

---

<a id="remaining-2"></a>

### remaining

`virtual`

```cpp
virtual std::int64_t remaining()
```

[Defined in src/sched/include/icy/sched/trigger.h:70](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L70)

Returns the milliseconds remaining until the next scheduled timeout.

---

<a id="timeout-11"></a>

### timeout

`virtual`

```cpp
virtual bool timeout()
```

[Defined in src/sched/include/icy/sched/trigger.h:74](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L74)

Returns true if the task is ready to be run, false otherwise.

---

<a id="expired-5"></a>

### expired

`virtual`

```cpp
virtual bool expired()
```

[Defined in src/sched/include/icy/sched/trigger.h:79](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L79)

Returns true if the task is expired and should be destroyed. Returns false by default.

#### Reimplemented by

- [`OnceOnlyTrigger::expired`](https://auscaster.com/icey/docs/api-reference/icy-sched-OnceOnlyTrigger.md#expired-4)
- [`IntervalTrigger::expired`](https://auscaster.com/icey/docs/api-reference/icy-sched-IntervalTrigger.md#expired-3)

---

<a id="serialize-5"></a>

### serialize

`virtual` `override`

```cpp
virtual void serialize(json::Value & root) override
```

[Defined in src/sched/include/icy/sched/trigger.h:83](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L83)

Serializes timing state (type, name, createdAt, scheduleAt, lastRunAt, timesRun) to `root`.

#### Reimplements

- [`ISerializable::serialize`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#serialize-1)

#### Reimplemented by

- [`IntervalTrigger::serialize`](https://auscaster.com/icey/docs/api-reference/icy-sched-IntervalTrigger.md#serialize-2)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `root` | [`json::Value`](https://auscaster.com/icey/docs/api-reference/icy-json.md#value) & | JSON object to populate. |

---

<a id="deserialize-5"></a>

### deserialize

`virtual` `override`

```cpp
virtual void deserialize(json::Value & root) override
```

[Defined in src/sched/include/icy/sched/trigger.h:87](https://github.com/auscaster/icey/blob/main/src/sched/include/icy/sched/trigger.h#L87)

Deserializes timing state from `root`.

#### Reimplements

- [`ISerializable::deserialize`](https://auscaster.com/icey/docs/api-reference/icy-json-ISerializable.md#deserialize-1)

#### Reimplemented by

- [`IntervalTrigger::deserialize`](https://auscaster.com/icey/docs/api-reference/icy-sched-IntervalTrigger.md#deserialize-2)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `root` | [`json::Value`](https://auscaster.com/icey/docs/api-reference/icy-json.md#value) & | JSON object previously produced by [serialize()](#serialize-5). |
