bad_socket 0.1.1 copy "bad_socket: ^0.1.1" 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.

0
likes
40
points
20
downloads

Publisher

unverified uploader

Weekly Downloads

Add constrains to your Socket to simulate realworld network connections.

Repository (GitHub)

License

MIT (license)

More

Packages that depend on bad_socket