# CMxIndirectBase Class

Namespace: `ArchestrA.Toolkit`

CMxIndirectBase is an inherited class that provides methods and properties common to the two types of Indirects: CMxIndirect and CMxIndirectWriteOnly.

**Syntax**

```csharp
public class CMxIndirectBase
```

## CMxIndirectBase Properties

### Context Property

The context that was used to create the indirect.

**Syntax**

```csharp
public string Context { get; }
```

**Returns**

string

### FullReferenceString Property

The reference string that was used to create the CMXIndirectBase instance.

**Syntax**

```csharp
public string FullReferenceString { get; }
```

**Returns**

string

### HasTimedOut Property

Indirects contains a timer that tracks how long it successfully connected to its remote attribute. If this time is longer than the TimeOut value, then this property returns true.

**Syntax**

```csharp
public bool HasTimedOut { get; }
```

**Returns**

bool

### RefHandle Property

The RefHandle is the ArchestrA id for the reference bound to this Indirect.

**Syntax**

```csharp
public int RefHandle { get; }
```

**Returns**

int

### StatusId Property

The status of a write is written to a dynamic attribute array. This is attribute id of the dynamic array.

**Syntax**

```csharp
public short StatusId { get; }
```

**Returns**

short

### StatusIndex Property

The status of a write is written to a dynamic attribute array. This is the index of the element of that array that this indirect will write its status to.

**Syntax**

```csharp
public int StatusIndex { get; }
```

**Returns**

int

### StatusOfLastWrite Property

This returns the status value of the last write attempt from the dynamic attribute array.

A user can monitor this value to seen when a write has completed, successfully or otherwise.

**Syntax**

```csharp
public MxStatus StatusOfLastWrite { get; }
```

**Returns**

MxStatus

### TimeOut Property

Allows the user the set the TimeOut used by HasTimedOut.

**Syntax**

```csharp
public TimeSpan TimeOut { get; set; }
```

**Returns**

TimeSpan

## CMxIndirectBase Constructor

### CMxIndirectBase Constructor string, string, ArchestrA.Core.IMxSupervisoryConnection3, RuntimeBase, int, short, int

This is an internal constructor intended for use only by derived classes.

**Syntax**

```csharp
CMxIndirectBase(string _fullRefString, string _context, ArchestrA.Core.IMxSupervisoryConnection3 _superConn, RuntimeBase _rb, int _refHandle, short _statusId, int _statusIndex)
```

**Parameters**

**`_fullRefString`**

[in] Full reference string of the attribute to bind to.

**`_context`**

[in] Context of the reference.

**`_superConn`**

[in] A supervisory connection to the runtime.

**`_rb`**

[in] A handle to the RuntimeBase class instance that created this indirect.

**`_refHandle`**

[in] The ArchestrA reference handle of the registered reference.

**`_statusId`**

[in] The attribute id of the dynamic array that holds the write status's.

**`_statusIndex`**

[in] The index of the element in the dynamic status array that this reference uses.

## CMxIndirectBase Methods

### Activate Method

Activates a suspended indirect.

**Syntax**

```csharp
public bool Activate();
```

**Returns**

bool

### Activate Method(ArchestrA.MessageExchange.IMxCallback2)

Activates a suspended indirect and allows the user to supply a callback variable.

**Syntax**

```csharp
public bool Activate(ArchestrA.MessageExchange.IMxCallback2 callback)
```

**Parameters**

**`callback`**

[in] The callback supplied by the user to be called when the Activate has finished.

**Returns**

bool

### Set Method(CMxValue, DateTime)

Writes the value and timestamp to the indirect in a single operation.

**Syntax**

```csharp
public bool Set(CMxValue value, DateTime timeStamp)
```

**Parameters**

**`value`**

[in] The value to be written.

**`timeStamp`**

[in] The timestamp for the value.

**Returns**

bool

### Suspend Method

Suspends an active indirect.

**Syntax**

```csharp
public bool Suspend()
```

**Returns**

bool

### Suspend Method (ArchestrA.MessageExchange.IMxCallback2)

Suspends an active indirect and allows the user to supply a callback variable.

**Syntax**

```csharp
public bool Suspend(ArchestrA.MessageExchange.IMxCallback2 callback)
```

**Parameters**

**`callback`**

[in] The callback supplied by the user to be called when the Suspend has finished.

**Returns**

bool

### Unbind Method

Unbinds the indirect, releasing the ArchestrA reference and dynamic status array index.

**Syntax**

```csharp
public void Unbind()
```
