# Client

<a id="client"></a>

# Client

```cpp
#include <icy/http/client.h>

class Client
```

[Defined in src/http/include/icy/http/client.h:193](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L193)

HTTP client for creating and managing outgoing connections.

## Friends

| Name | Description |
|------|-------------|
| [`ClientConnection`](#clientconnection)  |  |

---

<a id="clientconnection"></a>

### ClientConnection

```cpp
friend class ClientConnection
```

[Defined in src/http/include/icy/http/client.h:253](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L253)

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`NullSignal`](https://auscaster.com/icey/docs/api-reference/base.md#nullsignal) | [`Shutdown`](#shutdown-8)  |  |

---

<a id="shutdown-8"></a>

### Shutdown

```cpp
NullSignal Shutdown
```

Type: [`NullSignal`](https://auscaster.com/icey/docs/api-reference/base.md#nullsignal)

[Defined in src/http/include/icy/http/client.h:248](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L248)

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`Client`](#client-1)  |  |
|  | [`~Client`](#client-2) `virtual` |  |
| `void` | [`stop`](#stop-13)  | Stop the [Client](#client) and close all connections. |
| [`ClientConnection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#ptr-16) | [`createConnectionT`](#createconnectiont-1) `inline` | Creates and registers a typed client connection for the given [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url). The connection type is inferred from the [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) scheme (http, https, ws, wss). |
| [`ClientConnection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#ptr-16) | [`createConnection`](#createconnection-1) `inline` | Creates and registers a [ClientConnection](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#clientconnection-1) for the given [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url). The socket type is chosen based on the [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) scheme (http/https/ws/wss). |
| `void` | [`addConnection`](#addconnection) `virtual` | Registers a connection with this client so it is tracked and cleaned up on [stop()](#stop-13). |
| `void` | [`removeConnection`](#removeconnection) `virtual` | Removes a previously registered connection from the client. |

---

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

### Client

```cpp
Client()
```

[Defined in src/http/include/icy/http/client.h:196](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L196)

---

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

### ~Client

`virtual`

```cpp
virtual ~Client()
```

[Defined in src/http/include/icy/http/client.h:197](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L197)

---

<a id="stop-13"></a>

### stop

```cpp
void stop()
```

[Defined in src/http/include/icy/http/client.h:206](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L206)

Stop the [Client](#client) and close all connections.

---

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

### createConnectionT

`inline`

```cpp
template<class ConnectionT> inline ClientConnection::Ptr createConnectionT(const URL & url, uv::Loop * loop = uv::defaultLoop())
```

[Defined in src/http/include/icy/http/client.h:216](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L216)

Creates and registers a typed client connection for the given [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url). The connection type is inferred from the [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) scheme (http, https, ws, wss). 
#### Returns
Shared pointer to the created connection.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `url` | const [`URL`](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) & | Target [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url). The scheme determines the socket and adapter type. |
| `loop` | [`uv::Loop`](https://auscaster.com/icey/docs/api-reference/uv.md#loop-1) * | Event loop to use. Defaults to the default libuv loop. |

---

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

### createConnection

`inline`

```cpp
inline ClientConnection::Ptr createConnection(const URL & url, uv::Loop * loop = uv::defaultLoop())
```

[Defined in src/http/include/icy/http/client.h:230](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L230)

Creates and registers a [ClientConnection](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#clientconnection-1) for the given [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url). The socket type is chosen based on the [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) scheme (http/https/ws/wss). 
#### Returns
Shared pointer to the created connection.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `url` | const [`URL`](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url) & | Target [URL](https://auscaster.com/icey/docs/api-reference/icy-http-URL.md#url). |
| `loop` | [`uv::Loop`](https://auscaster.com/icey/docs/api-reference/uv.md#loop-1) * | Event loop to use. Defaults to the default libuv loop. |

---

<a id="addconnection"></a>

### addConnection

`virtual`

```cpp
virtual void addConnection(ClientConnection::Ptr conn)
```

[Defined in src/http/include/icy/http/client.h:241](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L241)

Registers a connection with this client so it is tracked and cleaned up on [stop()](#stop-13).

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `conn` | [`ClientConnection::Ptr`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#ptr-16) | The connection to add. |

---

<a id="removeconnection"></a>

### removeConnection

`virtual`

```cpp
virtual void removeConnection(ClientConnection * conn)
```

[Defined in src/http/include/icy/http/client.h:246](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L246)

Removes a previously registered connection from the client.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `conn` | [`ClientConnection`](https://auscaster.com/icey/docs/api-reference/icy-http-ClientConnection.md#clientconnection-1) * | Raw pointer to the connection to remove. |

#### Exceptions

| Exception | Description |
|-----------|-------------|
| `std::logic_error` | if the connection is not tracked by this client. |

## Public Static Methods

| Return | Name | Description |
|--------|------|-------------|
| [`Client`](#client) & | [`instance`](#instance-7) `static` | Return the default HTTP [Client](#client) singleton. |
| `void` | [`destroy`](#destroy-5) `static` | Destroys the default HTTP [Client](#client) singleton. |

---

<a id="instance-7"></a>

### instance

`static`

```cpp
static Client & instance()
```

[Defined in src/http/include/icy/http/client.h:200](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L200)

Return the default HTTP [Client](#client) singleton.

---

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

### destroy

`static`

```cpp
static void destroy()
```

[Defined in src/http/include/icy/http/client.h:203](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L203)

Destroys the default HTTP [Client](#client) singleton.

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`ClientConnectionPtrVec`](https://auscaster.com/icey/docs/api-reference/icy-http.md#clientconnectionptrvec) | [`_connections`](#_connections)  |  |

---

<a id="_connections"></a>

### _connections

```cpp
ClientConnectionPtrVec _connections
```

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

[Defined in src/http/include/icy/http/client.h:255](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L255)

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
| `void` | [`onConnectionClose`](#onconnectionclose)  |  |

---

<a id="onconnectionclose"></a>

### onConnectionClose

```cpp
void onConnectionClose(Connection & conn)
```

[Defined in src/http/include/icy/http/client.h:251](https://github.com/auscaster/icey/blob/main/src/http/include/icy/http/client.h#L251)
