Sample code for 30+ languages & platforms
Dart

Read Bitfinex WebSocket Ticker Channel

See more WebSocket Examples

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

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

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

  final ws = CkWebSocket();

  // 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.

  final rest = CkRest();

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

  final responseBody = rest.fullRequestNoBody('GET', '/ws');
  try {
    ws.validateServerHandshake();
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    print(responseBody);
    print(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 {
    ws.readFrame();
  } on ChilkatException catch (e) {
    print('Failed to receive a frame');
    print('ReadFrame fail reason = ${ws.readFrameFailReason}');
    print(e.lastErrorText);
    return;
  }

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

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

  final finalFrame = true;
  ws.sendFrame(json.emit(), finalFrame);

  // Read the response.
  try {
    ws.readFrame();
  } on ChilkatException catch (e) {
    print('Failed to receive a frame');
    print('ReadFrame fail reason = ${ws.readFrameFailReason}');
    print(e.lastErrorText);
    return;
  }

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

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

    try {
      ws.readFrame();
    } on ChilkatException catch (e) {
      print('Failed to receive a frame');
      print('ReadFrame fail reason = ${ws.readFrameFailReason}');
      print(e.lastErrorText);
      return;
    }

    // The responses we desire are in Text frames, where the opcode = 1.
    if (ws.frameOpcodeInt == 1) {
      final receivedText = ws.getFrameData();
      print(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 {
    ws.sendClose(true, 1000, 'Closing this websocket.');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Read the Close response.
  try {
    ws.readFrame();
  } on ChilkatException catch (e) {
    print('ReadFrame fail reason = ${ws.readFrameFailReason}');
    print(e.lastErrorText);
    return;
  }

  print('Success.');
}