Future checkExpend()

in LibTest/io/RawDatagramSocket/expand_A04_t01.dart [23:83]


Future<List> checkExpend(bool secondListen) async {
  RawDatagramSocket producer = await RawDatagramSocket.bind(localhost, 0);
  RawDatagramSocket receiver = await RawDatagramSocket.bind(localhost, 0);
  List<List<int>> toSend = [[0, 1, 2, 3], [1, 2, 3], [2, 3]];
  Completer<List> completer = new Completer<List>();
  Future<List> f = completer.future;
  Duration delay = const Duration(seconds: 2);
  List<dynamic> received = [];
  List<dynamic> receivedEvents = [];
  int n = 0;

  bool wasSent = await sendDatagram(producer, toSend, localhost, receiver.port);
  Expect.isTrue(wasSent, "No datagram was sent");

  Iterable convert(value) {
    n++;
    return [1];
  }

  Stream<RawSocketEvent> bcs = receiver.asBroadcastStream();
  Stream s = bcs.expand(convert);
  Future list1 = s.toList();

  list1.then((value) {
    received = value;
  }).whenComplete(() {
    if (!secondListen) {
      if (!completer.isCompleted) {
        completer.complete(received);
      }
      return f;
    }
  });

  if (secondListen) {
    Future list2 = s.toList();
    list2.then((value) {
      for (int i = 0; i < value.length; i++) {
        received.add(value[i]);
      }
    }).whenComplete(() {
      if (!completer.isCompleted) {
        completer.complete(received);
      }
      return f;
    });
  }

  bcs.listen((event) {
    receivedEvents.add(event);
    receiver.receive();
  });

  new Future.delayed(delay, () {
    if (!completer.isCompleted) {
      receiver.close();
    }
  });

  return f;
}