streamText method

Future<TextStreamWriter> streamText(
  1. StreamTextOptions? options
)

Implementation

Future<TextStreamWriter> streamText(StreamTextOptions? options) async {
  final streamId = options?.streamId ?? Uuid().v4();
  final timestamp = DateTime.timestamp().millisecondsSinceEpoch;

  final info = TextStreamInfo(
    id: streamId,
    mimeType: 'text/plain',
    timestamp: timestamp,
    topic: options?.topic ?? '',
    size: options?.totalSize ?? 0,
    replyToStreamId: options?.replyToStreamId,
    attachedStreamIds: options?.attachedStreamIds ?? [],
    version: options?.version,
    generated: options?.generated ?? false,
    operationType: options?.type,
    sendingParticipantIdentity: identity,
  );

  final header = lk_models.DataStream_Header(
    streamId: streamId,
    mimeType: info.mimeType,
    topic: info.topic,
    timestamp: Int64(timestamp),
    totalLength: Int64(options?.totalSize ?? 0),
    attributes: options?.attributes.entries,
    textHeader: lk_models.DataStream_TextHeader(
      version: options?.version,
      attachedStreamIds: options?.attachedStreamIds,
      replyToStreamId: options?.replyToStreamId,
      generated: options?.generated ?? false,
      operationType: options?.type?.toPBType(),
    ),
  );

  final destinationIdentities = options?.destinationIdentities;
  final packet = lk_models.DataPacket(
    kind: lk_models.DataPacket_Kind.RELIABLE,
    destinationIdentities: destinationIdentities,
    streamHeader: header,
  );
  await room.engine.sendDataPacket(packet, reliability: Reliability.reliable);

  final writableStream =
      WritableStream<String>(destinationIdentities: destinationIdentities!, engine: room.engine, streamId: streamId);

  onEngineClose() async {
    await writableStream.close();
  }

  final cancelFun = room.engine.events.once<EngineClosingEvent>((_) => onEngineClose);

  final writer = TextStreamWriter(writableStream: writableStream, info: info, onClose: cancelFun);

  return writer;
}