ClientSession.base constructor

ClientSession.base({
  1. required String id,
  2. required TransportConnection connection,
  3. Compressor? compressor,
  4. MessageCodec<Message>? messageCodec,
  5. int? maxBufferSize,
  6. List<ServerSyncPlugin> plugins = const [],
})

Base constructor for concrete sessions.

Implementation

ClientSession.base({
  required this.id,
  required TransportConnection connection,
  Compressor? compressor,
  MessageCodec<Message>? messageCodec,
  int? maxBufferSize,
  List<ServerSyncPlugin> plugins = const [],
})  : _isClosed = false,
      _connection = connection,
      _plugins = plugins,
      _sessionEventController = StreamController<SessionEvent>.broadcast(),
      _messageCodec = CompressedCodec<Message>(
        PluginAwareMessageCodec.fromPlugins(
          plugins: plugins,
          defaultCodec: messageCodec ??
              JsonMessageCodec<Message>(
                toJson: (message) => message.toJson(),
                fromJson: Message.fromJson,
              ),
        ),
        compressor: compressor ?? NoCompression.instance,
      ) {
  _outboundQueue = OutboundQueue(
    onSend: _connection.send,
    maxBufferSize: maxBufferSize ?? Protocol.maxBufferSize,
  );
  _updateClientActivity();
  _connection.incoming.listen(
    _handleData,
    onError: _handleConnectionError,
    onDone: _handleConnectionClosed,
  );

  _startHeartbeatMonitoring();
  for (final plugin in _plugins) {
    plugin.onNewSession(this);
  }
}