dart-lang / web_socket_channel

StreamChannel wrappers for WebSockets.
https://pub.dev/packages/web_socket_channel
BSD 3-Clause "New" or "Revised" License
417 stars 109 forks source link

How to reconnect and resend request? #73

Open po1arbear opened 5 years ago

po1arbear commented 5 years ago

My code below,but I caught a ANR ,I want know the correct method to reconnect, thx.

_listen() async {
    _channel.stream.listen((message) {

    }, onError: (error) async {
      Fluttertoast.showToast(msg: "onerror");
      await Future.delayed(Duration(milliseconds: 1000));
      reConnect();
    }, onDone: () async {
      Fluttertoast.showToast(msg: "ondone");
      await Future.delayed(Duration(milliseconds: 1000));
      reConnect();
    });
  }

void reConnect() {
    print("reConnect------>IOWebSocketChannel");
    _channel = IOWebSocketChannel.connect(Address.SOCKET_BASE_URL_RELEASE);
    _channel.sink.add(getHistoryDealParam());
    _channel.sink.add(getRealTimeDeal());
   _listen();
  }

@dart-lang

po1arbear commented 5 years ago

Anyone help?

jfajardo commented 4 years ago

Thanks, it works! index_page.dart

  void initState(){
    super.initState();
    listenWs();
  }

  listenWs(){
    widget.channel.stream.listen((onData){
      final data = json.decode(onData);
      print(data);
    },onDone: (){
      reConnectWs();
      }
    );
  }

  reConnectWs(){
    final token = prefs.token;

    Future.delayed(Duration(milliseconds: 1000)).then((_){
      widget.channel = IOWebSocketChannel.connect(WS_URL);
      listenWs();
    });

  }

routes.dart

IndexPage(channel: IOWebSocketChannel.connect(WS_URL),)