handleRawMessage method
Implementation
Future<String> handleRawMessage(String message) async {
var requestId = 'unknown';
try {
final decoded = jsonDecode(message);
if (decoded is! Map<Object?, Object?>) {
return _encodeBridgeError(
requestId: requestId,
statusCode: 400,
error: 'bridgeInvalidMessage',
message: 'Bridge message payload must be a JSON object.',
);
}
final requestJson = Map<String, Object?>.from(decoded);
final rawRequestId = requestJson['requestId'];
if (rawRequestId is String && rawRequestId.isNotEmpty) {
requestId = rawRequestId;
}
final request = CockpitRemoteBridgeRequest.fromJson(requestJson);
requestId = request.requestId;
final endpointResponse = await _requestHandler(
CockpitRemoteSessionEndpointRequest(
method: request.method,
uri: request.uri,
jsonBody: request.jsonBody ?? const <String, Object?>{},
),
);
return jsonEncode(
(await _bridgeResponseFromEndpointResponse(
requestId: requestId,
response: endpointResponse,
)).toJson(),
);
} on FormatException catch (error) {
return _encodeBridgeError(
requestId: requestId,
statusCode: 400,
error: 'bridgeInvalidMessage',
message: error.message,
);
} on Object catch (error) {
return _encodeBridgeError(
requestId: requestId,
statusCode: 500,
error: 'bridgeRequestFailed',
message: '$error',
);
}
}