listen function
Future<void>
listen(
- SqlCrdt crdt,
- int port, {
- Duration? pingInterval = defaultPingInterval,
- ServerHandshakeDataBuilder? handshakeDataBuilder,
- Map<
String, Query> ? changesetQueries, - RecordValidator? validateRecord,
- void onConnecting(
- HttpRequest request
- ServerOnConnect? onConnect,
- OnDisconnect? onDisconnect,
- OnChangeset? onChangesetReceived,
- OnChangeset? onChangesetSent,
- bool verbose = false,
Opens an HTTP socket and starts listening for incoming connections on the
specified port.
pingInterval defines the WebSocket heartbeat frequency and allows the
server to identify and release stale connections. This is highly
recommended since stale connections keep database subscriptions which
cause queries to be run on every change.
Defaults to 20 seconds, set to null to disable.
Use onConnection to monitor incoming HTTP connections.
See CrdtSync.server for a description of the remaining parameters.
Implementation
Future<void> listen(
SqlCrdt crdt,
int port, {
Duration? pingInterval = defaultPingInterval,
ServerHandshakeDataBuilder? handshakeDataBuilder,
Map<String, Query>? changesetQueries,
RecordValidator? validateRecord,
void Function(HttpRequest request)? onConnecting,
ServerOnConnect? onConnect,
OnDisconnect? onDisconnect,
OnChangeset? onChangesetReceived,
OnChangeset? onChangesetSent,
bool verbose = false,
}) async {
final server = await HttpServer.bind(InternetAddress.loopbackIPv4, port);
if (verbose) print('Listening on localhost:${server.port}');
await for (HttpRequest request in server) {
onConnecting?.call(request);
await upgrade(
crdt,
request,
pingInterval: pingInterval,
handshakeDataBuilder: handshakeDataBuilder,
changesetQueries: changesetQueries,
validateRecord: validateRecord,
onConnect: onConnect,
onDisconnect: onDisconnect,
onChangesetReceived: onChangesetReceived,
onChangesetSent: onChangesetSent,
verbose: verbose,
);
}
}