@nuralogix.ai/dfx-api-client / WebSocket / methods

Methods

There are three WebSocket methods:

  • connect
  • disconnect
  • sendMessage

connect

To establish a new WebSocket connection:

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:

apiClient.websocket.disconnect();

sendMessage

To send a message to the server:

apiClient.websocket.sendMessage(actionId: string, data: any);

Example:

/**
 * 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(
  '0506',
  {
    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 event