[@nuralogix.ai/dfx-api-client](../index.md) / [WebSocket](index.md) / methods

## Methods

There are three WebSocket methods:
* `connect`
* `disconnect`
* `sendMessage`


### connect
To establish a new WebSocket connection:

```js
const apiClient = client();
apiClient.websocket.connect();
```
`NOTE:` When socket connection is opened, the library tries to
authenticate against server using the `apiClient.session.deviceToken`
property that is previously stored in the current instance of the apiClient.

Please make sure the token is already set for the
current session before staring a connection.

### disconnect

To close the current connection:

```js
apiClient.websocket.disconnect();
```

### sendMessage

To send a message to the server:
```js
apiClient.websocket.sendMessage(actionId: ActionIdValues, data: any);
```

Example:

```js
/**
 * Adds collected blood-flow data to a specific measurement. Upon submitting a
 * chunk of data, the API will return a MeasurementDataID value representing
 * the received chunk. Data must be sent to the server in the order produced by
 * the DFX SDK. If a chunk it sent out of order, the server will return an error.
 * Please ensure that new chunks are only sent after the server responds with a
 * MeasurementDataID.
 * 
 * Submitting measurements has three stages:
 * 
 * a) starting,
 * 
 * b) measurement body,
 * 
 * c) closing a measurement.
 * 
 * Each of these phases have the same payload structure however a different Action
 * flag is to be sent with each request and must follow the CHUNK::ACTION format.
 * 
 * Measurement Actions | Description
 * 
 * FIRST::PROCESS      | Start a new measurement (drop any existing), Process results
 * 
 * FIRST::IGNORE       | Start a new measurement (drop any existing), Do not process
 * 
 * CHUNK::PROCESS      | Arbitrary block of TOI data and process results
 * 
 * CHUNK::IGNORE       | Arbitrary block of TOI data and do not process results
 * 
 * LAST::PROCESS       | Finish a measurement cycle and process results
 * 
 * LAST::IGNORE        | Finish a measurement cycle and do not process
 * 
 * `Payload` is binary data that can currently only be obtained by using our SDK.
 * The Payload (binary content) field must be `base64-encoded`.
 * 
 * Note: This endpoint is a subject to request throttling, you must not submit more
 * data than can be obtained in real time. i.e., do not send more than five seconds
 * of chunk data over the course of five seconds of real time.
 * 
 * Response Error Codes Explanation:
 * 
 * * "RATE_LIMIT": You have sent too many chunks in a given time period. See the Note above.
 * * "MEASUREMENT_CLOSED": Requested Measurement is already finished. You need to create a new Measurement.
 * * "MISALIGNED_CHUNK": Chunk Order was mismatched. i.e., ChunkOrder 2 was sent before ChunkOrder 1.
 * * "INVALID_MEASUREMENT": Requested Measurement ID was not found.
 * * "UNPACKER_RPC_ERROR": Payload validation has been failed. Reason(s) will be provided in error message.
 */
apiClient.websocket.sendMessage(
  ActionId.MEASUREMENTS.DATA,
  {
    Params: {ID: 'your-measurement-id-goes-here' }, 
    Action: 'set-action-here',
    Payload: Buffer.from('your-payload').toString('base64')
  }
);
```

`Note:` the same `actionId` you set here is returned when
the response of your call is received from the server in [onmessage](events.md#onmessage) event
