// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/// @assertion void close()
/// Close the datagram socket.
///
/// @description Checks that if RawDatagramSocket is closed with method close,
/// it does not receive sent events.
/// @author ngl@unipro.ru


import "dart:async";
import "dart:io";
import "../http_utils.dart";
import "../../../Utils/expect.dart";

var localhost = InternetAddress.loopbackIPv4;

Future<List<List<int>>> receiveAndClose(RawDatagramSocket receiver,
    {Duration delay = const Duration(seconds: 2)}) {
  List<List<int>> received = [];
  Completer<List<List<int>>> completer = new Completer<List<List<int>>>();
  Future<List<List<int>>> f = completer.future;
  receiver.listen((_event) {
    var datagram = receiver.receive();
    if (datagram != null) {
      received.add(datagram.data.toList());
    }
    if (received.length == 1) {
      receiver.close();
    }
    if (_event == RawSocketEvent.closed) {
      if(!completer.isCompleted) {
        completer.complete(received);
      }
    }
  });
  new Future.delayed(delay, () {
    if (!completer.isCompleted) {
      receiver.close();
      completer.complete(received);
    }
  });
  return f;
}

main() async {
  RawDatagramSocket producer = await RawDatagramSocket.bind(localhost, 0);
  RawDatagramSocket receiver = await RawDatagramSocket.bind(localhost, 0);
  List<List<int>> toSend = [[0, 1, 2, 3, 4], [5, 6, 7], [8, 9], [10]];

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

  bool wasSent2 =
    await sendDatagram(producer, [[4], [5]], localhost, receiver.port);
  Expect.isTrue(wasSent2, "No datagram was sent");

  List<List<int>> received = await receiveAndClose(receiver);
  Expect.isTrue(received.length <= 2);
}
