handleStreamHeader method

Future<void> handleStreamHeader(
  1. DataStream_Header streamHeader,
  2. String participantIdentity
)

Implementation

Future<void> handleStreamHeader(lk_models.DataStream_Header streamHeader,
    String participantIdentity) async {
  if (streamHeader.hasByteHeader()) {
    final streamHandlerCallback = _byteStreamHandlers[streamHeader.topic];

    if (streamHandlerCallback == null) {
      logger.info(
          'ignoring incoming byte stream due to no handler for topic ${streamHeader.topic}');
      return;
    }

    var info = ByteStreamInfo(
      id: streamHeader.streamId,
      name: streamHeader.byteHeader.name,
      mimeType: streamHeader.mimeType,
      size: streamHeader.hasTotalLength()
          ? streamHeader.totalLength.toInt()
          : 0,
      topic: streamHeader.topic,
      timestamp: streamHeader.timestamp.toInt(),
      attributes: streamHeader.attributes,
    );

    var streamController = DataStreamController<lk_models.DataStream_Chunk>(
      info: info,
      streamController: StreamController<lk_models.DataStream_Chunk>(),
      startTime: DateTime.now().millisecondsSinceEpoch,
    );

    _byteStreamControllers[streamHeader.streamId] = streamController;

    streamHandlerCallback(
      ByteStreamReader(
          info, streamController, streamHeader.totalLength.toInt()),
      participantIdentity,
    );
  } else if (streamHeader.hasTextHeader()) {
    final streamHandlerCallback = _textStreamHandlers[streamHeader.topic];

    if (streamHandlerCallback == null) {
      logger.warning(
          'ignoring incoming text stream due to no handler for topic ${streamHeader.topic}');
      return;
    }

    var info = TextStreamInfo(
      id: streamHeader.streamId,
      mimeType: streamHeader.mimeType,
      size: streamHeader.hasTotalLength()
          ? streamHeader.totalLength.toInt()
          : 0,
      topic: streamHeader.topic,
      timestamp: streamHeader.timestamp.toInt(),
      attributes: streamHeader.attributes,
    );

    var streamController = DataStreamController<lk_models.DataStream_Chunk>(
      info: info,
      streamController: StreamController<lk_models.DataStream_Chunk>(),
      startTime: DateTime.now().millisecondsSinceEpoch,
    );

    _textStreamControllers[streamHeader.streamId] = streamController;

    streamHandlerCallback(
      TextStreamReader(
          info, streamController, streamHeader.totalLength.toInt()),
      participantIdentity,
    );
  }
}