bad_socket 0.1.1  bad_socket: ^0.1.1 copied to clipboard
bad_socket: ^0.1.1 copied to clipboard
Add constrains to your Socket to simulate realworld network connections.
Api #
BadSocket.wrap(Socket socket, {
  int readLatency,
  int readLoss,
  int writeLatency,
  int writeLoss,
});
Usage #
Basic example:
import 'dart:io';
import 'package:bad_socket/bad_socket.dart';
main() async {
  // 1. Create a normal socket.
  Socket socket = await Socket.bind('0.0.0.0', 1234);
  // 2. Wrap it.
  Socket badSocket = BadSocket.warp(socket,
    writeLatency: 100,
    writeLoss: 0.15,
  );
  // 3. Write to this wrapped socket will take effect
  //    after 100 ms,
  //    and 15% of write calls will be discarded.
  badSocket.add([0xCA, 0xFE]);
}
A complete example:
import 'dart:io';
import 'package:bad_socket/bad_socket.dart';
Future<int> startLocalEchoServer() async {
  final server = await ServerSocket.bind('0.0.0.0', 0);
  server.listen((socket) {
    final badSocket = BadSocket.wrap(
      socket,
      writeLatency: 100,
      writeLoss: 0.2,
    );
    badSocket.listen((data) {
      print('Server send: $data');
      badSocket.add(data);
      badSocket.flush();
    });
  });
  return server.port;
}
main() async {
  final port = await startLocalEchoServer();
  final client = await Socket.connect('127.0.0.1', port);
  client.listen((data) {
    print('Client recv: $data');
  });
  while (true) {
    final data = 'hello world'.runes.toList();
    data.shuffle();
    await Future.delayed(Duration(seconds: 1));
    print('Client send: $data');
    client.add(data);
    await client.flush();
  }
}
Features and bugs #
Please file feature requests and bugs at the issue tracker.