buildServer method

Future<void> buildServer(
  1. BuildInfoDto buildInfoDto, {
  2. required void onStart(
    1. EventMessageDto startMessage
    ),
  3. required void onData(
    1. CommandOutputDto commandOutput
    ),
  4. required void onDone(
    1. EventMessageDto startMessage
    ),
  5. void onError(
    1. Object error,
    2. StackTrace stackTrace
    )?,
})

POST /servers/build

Implementation

Future<void> buildServer(
  BuildInfoDto buildInfoDto, {
  required void Function(EventMessageDto startMessage) onStart,
  required void Function(CommandOutputDto commandOutput) onData,
  required void Function(EventMessageDto doneMessage) onDone,
  void Function(Object error, StackTrace stackTrace)? onError,
}) async {
  try {
    Stream<String> sseStream = await serverSse.request(
      '/build',
      queryParameters: buildInfoDto.toJson(),
    );
    void Function(String event, Map<String, dynamic> data) onEvent =
        (String event, Map<String, dynamic> data) {
          if (event == EventType.START) {
            onStart(EventMessageDto.fromJson(data));
          } else if (event == EventType.DATA) {
            onData(CommandOutputDto.fromJson(data));
          } else if (event == EventType.DONE) {
            onDone(EventMessageDto.fromJson(data));
          }
        };
    sseStream.listen(
      (data) => SseClient.parse(data, onEvent),
      onError: (error, stackTrace) {
        onError?.call(_normalizeError(error), stackTrace);
      },
      cancelOnError: true,
    );
  } catch (error, stackTrace) {
    final normalized = _normalizeError(error);
    if (onError != null) {
      onError(normalized, stackTrace);
      return;
    }
    if (identical(normalized, error)) rethrow;
    Error.throwWithStackTrace(normalized, stackTrace);
  }
}