connect method

void connect({
  1. Iterable<String>? protocols,
  2. required WebSocketSettings webSocketSettings,
})

Implementation

void connect(
    {Iterable<String>? protocols,
    required WebSocketSettings webSocketSettings}) async {
  logger.info('connect $_url, ${webSocketSettings.extraHeaders}, $protocols');
  try {
    _socket = WebSocket(_url, 'sip');
    _socket!.onOpen.listen((Event e) {
      onOpen?.call();
    });

    _socket!.onMessage.listen((MessageEvent e) async {
      if (e.data is Blob) {
        dynamic arrayBuffer = await JSUtils.promiseToFuture(
            JSUtils.callMethod(e.data, 'arrayBuffer', <Object>[]));
        String message = String.fromCharCodes(arrayBuffer.asUint8List());
        onMessage?.call(message);
      } else {
        onMessage?.call(e.data);
      }
    });

    _socket!.onClose.listen((CloseEvent e) {
      onClose?.call(e.code, e.reason);
    });
  } catch (e) {
    onClose?.call(0, e.toString());
  }
}