> Complete documentation index: [llms.txt](/llms.txt). Markdown versions of all pages are available by appending `.md` to page URLs.

# Using the Library

## General Overview

Using the Binho Mission Control C++ SDK library typically involves a series of steps to communicate with a target connected to the host adapter, execute commands and handle responses. Command requests and responses follow the Bridge API v1, which can be found at [Bridge 1.1 API Documentation](/user-guide/protocols-and-interfaces/bridge-11-api/).

Bellow is a high-level overview based on the provided example applications:

### 1. **Include Necessary Headers**

Include the necessary headers to access library's functionality:

```
#include "CommandDispatcher.h"
#include <iostream>
```

### 2. **Define Response Handler**

Define a function to handle responses from the commands sent to the target adapter. This function is responsible for displaying relevant information about the command's execution.

```
void printCommandResponse(const CommandResponse& cr, const std::string& action);
```

### 3. **Initialize the Dispatcher**

Create an instance of `CommandDispatcher` and specify the name of the target host adapter:

```
CommandDispatcher dispatcher("BinhoNova");   // For connecting with the Binho Nova host adapter
CommandDispatcher dispatcher("BinhoSupernova");   // For connecting with the Binho Supernova host adapter
```

**Note**: The argument passed to the `CommandDispatcher` initializer is the name of the target host adapter.

### 4. **Start the Dispatcher**

Before sending any commands, start the dispatcher:

```
dispatcher.start();
```

### 5. **Invoke Commands**

With the dispatcher running, invoke commands as needed:

* Synchronous Commands (waits for the command to finish before moving on):

```
dispatcher.invokeCommandSync("transaction_id", "command_name", command_params, response_handler);
```

* Asynchronous Commands (doesn't wait for the command to finish):

```
dispatcher.invokeCommand("transaction_id", "command_name", command_params);
```

### 6. **Wait for All Commands to Finish (Recommended)**

To ensure all issued commands are finished before proceeding:

```
dispatcher.waitForAllCommands();
```

### 7. **Stop the Dispatcher**

Once all tasks are completed, stop the dispatcher:

```
dispatcher.stop();
```