Sample code for 30+ languages & platforms
React Native

Read Bitfinex WebSocket Ticker Channel

See more WebSocket Examples

Subscribes to the public Bitfinex websocket ticker channel and receives ticker updates.

Chilkat React Native Downloads

React Native
import { JsonObject, Rest, WebSocket } from '@chilkat/react-native'

async function chilkatExample() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  const ws = new WebSocket();

  // For brevity, this example does not check for errors when etablishing the WebSocket connection.
  // See Establish WebSocket Connection for more complete sample code for making the connection.

  const rest = new Rest();

  // Connect to api.bitfinex.com
  await rest.connectAsync('api.bitfinex.com', 443, true, false);
  ws.useConnection(rest);
  ws.addClientHeaders();

  const responseBody = await rest.fullRequestNoBodyAsync('GET', '/ws');
  try {
    ws.validateServerHandshake();
  } catch {
    console.log(ws.lastErrorText);
    console.log(responseBody);
    console.log(rest.responseHeader);
    return;
  }

  // After connecting, the bitfinex websocket server will send
  // an info message that contains the actual version of the websocket stream.
  // Receive that message..
  try {
    await ws.readFrameAsync();
  } catch {
    console.log('Failed to receive a frame');
    console.log(`ReadFrame fail reason = ${ws.readFrameFailReason}`);
    console.log(ws.lastErrorText);
    return;
  }

  // We should get this:
  // {"event":"info","version":1.1,"platform":{"status":1}}
  console.log(ws.getFrameData());

  // Subscribe to the public ticker feed.
  // See https://docs.bitfinex.com/docs for more information.
  const json = new JsonObject();
  json.appendString('event', 'subscribe');
  json.appendString('channel', 'ticker');
  json.appendString('pair', 'BTCUSD');

  const finalFrame = true;
  await ws.sendFrameAsync(json.emit(), finalFrame);

  // Read the response.
  try {
    await ws.readFrameAsync();
  } catch {
    console.log('Failed to receive a frame');
    console.log(`ReadFrame fail reason = ${ws.readFrameFailReason}`);
    console.log(ws.lastErrorText);
    return;
  }

  // Examine the response
  // We should get this:
  // {"event":"subscribed","channel":"ticker","chanId":2751,"pair":"BTCUSD"}
  console.log(ws.getFrameData());

  // Begin reading the ticker feed.
  // We'll just read the 1st 5 updates and then exit..
  let numUpdatesReceived = 0;
  while (numUpdatesReceived < 5) {

    try {
      await ws.readFrameAsync();
    } catch {
      console.log('Failed to receive a frame');
      console.log(`ReadFrame fail reason = ${ws.readFrameFailReason}`);
      console.log(ws.lastErrorText);
      return;
    }

    // The responses we desire are in Text frames, where the opcode = 1.
    if (ws.frameOpcodeInt === 1) {
      const receivedText = ws.getFrameData();
      console.log(receivedText);
      // Should receive a line of text such as this:
      // [2751,7349,36.34269559,7349.1,41.01777063,-116.2,-0.0156,7349.1,22188.26055319,7560,7270.5]
      numUpdatesReceived++;
    }
  }

  // Close the websocket connection.
  try {
    await ws.sendCloseAsync(true, 1000, 'Closing this websocket.');
  } catch {
    console.log(ws.lastErrorText);
    return;
  }

  // Read the Close response.
  try {
    await ws.readFrameAsync();
  } catch {
    console.log(`ReadFrame fail reason = ${ws.readFrameFailReason}`);
    console.log(ws.lastErrorText);
    return;
  }

  console.log('Success.');
}