Sample code for 30+ languages & platforms
Dart

Binary.com Tick Stream

See more WebSocket Examples

Tick Stream Request -- Initiate a continuous stream of spot price updates for a given symbol.

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 ws.binaryws.com
  rest.connect('ws.binaryws.com', 443, true, false);
  ws.useConnection(rest);
  ws.addClientHeaders();

  // My app_id is 12332.  You'll wnat to use your own...
  final responseBody = rest.fullRequestNoBody('GET', '/websockets/v3?app_id=12332');
  try {
    ws.validateServerHandshake();
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    print(responseBody);
    print(rest.responseHeader);
    return;
  }

  // Build and send the following message:

  // {
  //   "ticks": "R_50",
  //   "subscribe": 1
  // }

  final json = CkJsonObject();
  json.appendString('ticks', 'R_50');
  json.appendInt('subscribe', 1);

  // Send a full message in a single frame
  final finalFrame = true;
  try {
    ws.sendFrame(json.emit(), finalFrame);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final jsonTickData = CkJsonObject();
  jsonTickData.emitCompact = false;

  // Begin reading the tick stream response.
  // We'll just read the 1st 10 updates and then exit..
  var numTicksReceived = 0;
  while (numTicksReceived < 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 receivedJson = ws.getFrameData();

      jsonTickData.load(receivedJson);
      print(jsonTickData.emit());

      numTicksReceived++;
    }
  }

  // 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.');

  // The output of the above code is shown here:

  // {
  //   "echo_req": {
  //     "subscribe": 1,
  //     "ticks": "R_50"
  //   },
  //   "msg_type": "tick",
  //   "tick": {
  //     "ask": "373.8725",
  //     "bid": "373.8325",
  //     "epoch": "1517437456",
  //     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
  //     "quote": "373.8525",
  //     "symbol": "R_50"
  //   }
  // }
  // 
  // {
  //   "echo_req": {
  //     "subscribe": 1,
  //     "ticks": "R_50"
  //   },
  //   "msg_type": "tick",
  //   "tick": {
  //     "ask": "373.7952",
  //     "bid": "373.7552",
  //     "epoch": "1517437458",
  //     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
  //     "quote": "373.7752",
  //     "symbol": "R_50"
  //   }
  // }
  // 
  // {
  //   "echo_req": {
  //     "subscribe": 1,
  //     "ticks": "R_50"
  //   },
  //   "msg_type": "tick",
  //   "tick": {
  //     "ask": "373.8638",
  //     "bid": "373.8238",
  //     "epoch": "1517437460",
  //     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
  //     "quote": "373.8438",
  //     "symbol": "R_50"
  //   }
  // }
  // 
  // {
  //   "echo_req": {
  //     "subscribe": 1,
  //     "ticks": "R_50"
  //   },
  //   "msg_type": "tick",
  //   "tick": {
  //     "ask": "373.7636",
  //     "bid": "373.7236",
  //     "epoch": "1517437462",
  //     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
  //     "quote": "373.7436",
  //     "symbol": "R_50"
  //   }
  // }
  // 
  // {
  //   "echo_req": {
  //     "subscribe": 1,
  //     "ticks": "R_50"
  //   },
  //   "msg_type": "tick",
  //   "tick": {
  //     "ask": "373.6870",
  //     "bid": "373.6470",
  //     "epoch": "1517437464",
  //     "id": "2d3dedf1-45e2-66a5-d0d3-72bd7f0a6ea9",
  //     "quote": "373.6670",
  //     "symbol": "R_50"
  //   }
  // }
  // 
  // Success.
}