startTool method
Future<void>
startTool(
- String toolId, {
- required void onData(
- CommandResultDto commandOutput
- required void onError(
- CommandResultDto commandOutput
- void onStreamError(
- Object error,
- StackTrace stackTrace
- int timeoutSeconds = -1,
POST /tools/{toolId}/start
Implementation
Future<void> startTool(
String toolId, {
required void Function(CommandResultDto commandOutput) onData,
required void Function(CommandResultDto commandError) onError,
void Function(Object error, StackTrace stackTrace)? onStreamError,
int timeoutSeconds = -1,
}) async {
try {
Map<String, dynamic>? queryParameters;
if (timeoutSeconds >= 0) {
queryParameters = {'timeout': '$timeoutSeconds'};
}
Stream<String> sseStream = await toolSse.request(
'/${toolId}/start',
queryParameters: queryParameters,
);
void Function(String event, Map<String, dynamic> data) onEvent =
(String event, Map<String, dynamic> data) {
if (event == EventType.DATA) {
onData(CommandResultDto.fromJson(data));
} else if (event == EventType.DONE) {
onError(CommandResultDto.fromJson(data));
}
};
sseStream.listen(
(data) => SseClient.parse(data, onEvent),
onError: (error, stackTrace) {
onStreamError?.call(error, stackTrace);
},
cancelOnError: true,
);
} catch (error, stackTrace) {
if (onStreamError != null) {
onStreamError(error, stackTrace);
return;
}
rethrow;
}
}