serverToServer static method
Future<SocketConnector>
serverToServer({
- InternetAddress? addressA,
- int portA = 0,
- InternetAddress? addressB,
- int portB = 0,
- bool verbose = false,
- bool logTraffic = false,
- SocketAuthVerifier? socketAuthVerifierA,
- SocketAuthVerifier? socketAuthVerifierB,
- Duration timeout = SocketConnector.defaultTimeout,
- IOSink? logger,
Binds two Server sockets on specified Internet Addresses. Ports on which to listen can be given but if not given a spare port will be found by the OS. Finally relays data between sockets and optionally displays contents using the verbose flag
Implementation
static Future<SocketConnector> serverToServer({
/// Defaults to [InternetAddress.anyIPv4]
InternetAddress? addressA,
int portA = 0,
/// Defaults to [InternetAddress.anyIPv4]
InternetAddress? addressB,
int portB = 0,
bool verbose = false,
bool logTraffic = false,
SocketAuthVerifier? socketAuthVerifierA,
SocketAuthVerifier? socketAuthVerifierB,
Duration timeout = SocketConnector.defaultTimeout,
IOSink? logger,
}) async {
IOSink logSink = logger ?? stderr;
addressA ??= InternetAddress.anyIPv4;
addressB ??= InternetAddress.anyIPv4;
SocketConnector connector = SocketConnector(
verbose: verbose,
logTraffic: logTraffic,
timeout: timeout,
logger: logSink,
);
connector._serverSocketA = await ServerSocket.bind(addressA, portA);
connector._serverSocketB = await ServerSocket.bind(addressB, portB);
if (verbose) {
logSink.writeln(
'${DateTime.now()} | serverToServer | Bound ports A: ${connector.sideAPort}, B: ${connector.sideBPort}');
}
// listen for connections to the side 'A' server
connector._serverSocketA!.listen((
socket,
) {
if (verbose) {
logSink.writeln(
'${DateTime.now()} | serverToServer | Connection on serverSocketA: ${connector._serverSocketA!.port}');
}
Side sideA = Side(socket, true, socketAuthVerifier: socketAuthVerifierA);
unawaited(connector.handleSingleConnection(sideA));
});
// listen for connections to the side 'B' server
connector._serverSocketB!.listen((socket) {
if (verbose) {
logSink.writeln(
'${DateTime.now()} | serverToServer | Connection on serverSocketB: ${connector._serverSocketB!.port}');
}
Side sideB = Side(socket, false, socketAuthVerifier: socketAuthVerifierB);
unawaited(connector.handleSingleConnection(sideB));
});
return (connector);
}