connect method

void connect()

Open a WebSocket connection to the Bybit API

Implementation

void connect() {
  log.d('ByBitWebSocket.connect()');

  timeoutTimer = RestartableTimer(timeout!, () {
    log.d('ByBitWebSocket timeoutTimer expired.');
    throw Exception('ByBitWebSocket timeoutTimer expired.');
  });

  transformer =
      StreamTransformer<dynamic, Map<String, dynamic>?>.fromHandlers(
    handleData: (data, sink) {
      timeoutTimer!.reset();
      sink.add(jsonDecode(data.toString()) as Map<String, dynamic>?);
    },
    handleDone: (sink) {
      log.i('ByBitWebSocket : Socket closed');
    },
    handleError: (error, stackTrace, sink) {
      log.e('ByBitWebSocket transformer error: ' + error.toString());
    },
  );
  controller = StreamController<Map<String, dynamic>?>();

  // +1000 is the timeout to avoid repeat attacks
  var timestamp = DateTime.now().millisecondsSinceEpoch + 1000;
  var signature = sign(secret: password, timestamp: timestamp);
  var param = 'api_key=' +
      key +
      '&expires=' +
      timestamp.toString() +
      '&signature=' +
      signature;
  log.i('Open WebSocket on: ' + url + '?' + param);

  websocket = WebSocketChannel.connect(Uri.parse(url + '?' + param));
  controller!.addStream(
      websocket!.stream.map((value) => value).transform(transformer!));
  timeoutTimer!.reset();

  if (pingPeriod > 0) {
    ping(); // Start ping
    pingTimer = Timer.periodic(Duration(seconds: pingPeriod), (timer) {
      ping();
    });
  }
}